データサイエンティスト(仮)

元素粒子論博士。今はデータサイエンティスト(仮)。

R Notebookを使えるようにしてみる

動機

最近、R Notebookが少し話題になっていました。自分はまだ使ったことがなかったので、この機会にR Notebookを導入してみようと思いました。

R Notebookとは

RStudio上でインタラクティブに作成できるNotebookです。RMarkdownで書くJupyter notebookというイメージかなと思います。

以前からRStudioにはRMarkdownでレポートを作成する機能は付いていました。実際に自分も業務で活用しています。RMarkdownは便利なのですが、毎回knitrを実行する必要があり、小さいカタマリの挙動をチェックするのにはあまり向いていません。レポート作成のためのテスト段階で、小さくサイクルを回せる某notebookのような機能があれば、よりレポート作成が捗りそうです。

そんな要望に答えるのが、R Notebookです。

R Notebookを使う方法

  • RMarkdownのページから、RStudio Previewへのリンク(RStudio Preview – RStudio)があるので、RStudio Previewのサイトへ

f:id:tekenuko:20161009002652p:plain

  • RStudio Preview(2016/10/09時点ではv1.0.35が最新)をインストール

f:id:tekenuko:20161009003558p:plain

  • RStudioで{rmarkdown}のgithub版を入れる
# devtoolsがインストールされていなかったらdevtoolsを先に入れる
install.packages("devtools", dependencies = TRUE)
# RMarkdownのインストール
devtools::install_github("rstudio/rmarkdown")
  • “File - R Notebook”を選択すると、サンプルのNotebookが出現

f:id:tekenuko:20161009005407p:plain


以下のようなサンプルが出てきます(自分はAppearanceとかをいじっているので、画面が暗めです)。
f:id:tekenuko:20161009005640p:plain

ためしにplot(cars)を実行してみると...
f:id:tekenuko:20161009010556p:plain
実行結果がすぐ下に現れます。実際にはコンソールに送られた内容をchunk(RMarkdownのRコードを書くところ)以下に表示しているようです。

参考ページ

RMarkdownのページと、RMarkdownのナレッジを持っている方のサイトを参考にしました。

ここでは、インストールまで行いました。プライベートや業務で使ってみて、よい知見があったら公開していきたいと思っています。

久々にC++を触ってみたら自明なクラスしか書けない

動機

自明な言葉を発する営みを若干抽象化したい。
tekenuko.hatenablog.com

自明なクラス作成

抽象化 = オブジェクト化。
外部からの入力が自明かどうかを判定します。

// trivialclass.cpp

# include <iostream>
# include <string>

using namespace std;

// クラス
class trivial{
// 変数と関数
private:
  string str;
public:
  void judgetrivial(string str);
};

// 入力に対して自明かどうか判定する関数
void trivial::judgetrivial(string str){
  if(str == "Hello world!"){
    cout << "自明ですね" << endl;
  }
  else{
    cout << "Highly nontrivial!" << endl;
  }
}

int main(){

  trivial tv;
  string str;
  cout << "自明な言葉はなーんだ?" << endl; // 自明なクイズ
  getline(cin, str); // 外部入力
  tv.judgetrivial(str); // 関数を実行

  return 0;
}

自明な実行

trivialclassという実行ファイルを作って実行します。自明なクイズが始まるので、自明な入力をすると...

$ g++ -o trivialclass trivialclass.cpp 
$ ./trivialclass

# 出力
自明な言葉はなーんだ?  // 自明なクイズが始まる
Hello world! // コマンドラインで自明に入力する
自明ですね // 自明だったらしいです

非自明なことを言うと…

$ g++ -o trivialclass trivialclass.cpp 
$ ./trivialclass

# 出力
自明な言葉はなーんだ?  // 自明なクイズが始まる
ケーラー多様体 // コマンドラインで自明に入力する
Highly nontrivial! // 非自明だったらしいです

とりあえず自明に動きました。

所感

これだけだと関数を定義したのと大差ないですね。継承とか関数の抽象化したりするともう少し感覚が戻ってくるのかもしれません。

久々にC++を触ってみたら自明なファイルしか読めない

動機

自明な言葉を発する営みを若干非自明にしたい。
tekenuko.hatenablog.com

自明なファイルを読むコード

非自明にする方法の一つとして、あらかじめ自明な言葉を保存したファイルを用意して、それを読み込む、というものがありえます。C++でファイルを開くときはfstreamヘッダをインクルードする必要があり、この中のifstream(インプットストリーム)を使用します。自明なコード例は以下です。

// trivialfile.cpp

# include <iostream>
# include <string>
# include <fstream> // ファイルを開くときに必要

using namespace std;

int main(){

  // 読み込み
  ifstream ifs("trivial.txt");
  // 読み込みできたかを判定
  if(ifs.fail()){
    cout << "自明な読み込みに失敗しました" << endl;
  }
  else{
    string str;
    // 一行読み込み
    getline(ifs, str);
    cout << str << endl;
  }
  ifs.close(); // 勝手に閉じるのでなくても問題ない
  return 0;

}

ifs.close()は明示的に書かなくても勝手に閉じます。

自明な実行

trivialfileという実行ファイルを作って実行します。あらかじめtrivial.txtというファイルに自明な言葉を保存しとくと…

$ g++ -o trivialfile trivialfile.cpp 
$ ./trivialfile 

# 出力
Hello world! // やっぱりファイルには自明な言葉が保存されていました

となり、ちょっとだけ非自明に自明な言葉を発してくれます。

自明な所感

リハビリとはいえ非常にしょうもないことしかやってません。とはいえ自分の備忘録的にやっているので気にせず進める。

久々にC++を触ってみたら自明な入力しかできないのはくやしい

自明な振り返り

自明な出力しかできませんでした。
tekenuko.hatenablog.com

動機

くやしいので非自明なことを言いたい。

自明(?)なコード

自明なことを入力すると自明だと言われます。

// trivial.cpp

# include <iostream>
# include <string>
using namespace std;

int main(){
  string str;
  cout << "自明な言葉はなーんだ?" << endl;

  // 空白があっても一つのカタマリと認識させるのに使用
  getline(cin, str);

  if(str == "Hello world!"){
    cout << "自明ですね" << endl;
  } else{
    cout << "自明じゃないですね" << endl;
  }

  return 0;
}

自明な実行

trivialという実行ファイルを作って実行します。自明なクイズが始まるので、自明な入力をすると...

$ g++ -o trivial trivial.cpp 
$ ./trivial

# 出力
自明な言葉はなーんだ?  //自明なクイズが始まる
Hello world! // コマンドラインで自明に入力する
自明ですね //自明だったらしいです

非自明なことをいう

とりあえず非自明なことを言ってみます。

$ g++ -o trivial trivial.cpp 
$ ./trivial

# 出力
自明な言葉はなーんだ?  //自明なクイズが始まる
ほとんどいたるところ連続 // コマンドラインで入力する
自明じゃないですね //自明じゃなかったらしいです

非自明だったようです。よかったです。

久々にC++を触ってみたら自明なことしかできない

自明な背景

3年ぶりくらいにC++触ってみたら自明なことしかできなかったので、自明なことをしたメモをします。

自明なコード

実行すると自明な言葉を発します。

// helloworld.cpp

#include <iostream>
using namespace std;

int main(){
  cout << "Hello world!" << endl;
  return 0;
}

自明な実行

自分はコマンドライン上でコンパイルして実行するという自明なことしかできない。helloworidという実行ファイルを使って実行するという自明な営みをすると自明なことをします。

$ g++ -o helloworld helloworld.cpp 
$ ./helloworld 

# 出力
Hello world!

自明なNext Step

今の自分のC++力は自明なコードを書けるレベルとホモトピー同値です。
修行します。