Railway gun

Web系企業に勤めるサラリーマンが書くブログ

文字列の合成と評価させる方法

R言語に限らず、ループカウンタ等の変数を使って文字列を作りたい事がある。
Rでのやり方は簡単。paste関数を使うだけ。

i=1
paste("hoge",i,"hoge")  #-> "hoge 1 hoge"

単純に繋ぎたいオブジェクトを「,」区切りで渡せば良い。
デフォルトだと、スペースが区切り文字として入ってしまうため、

i=1
paste("hoge",i,"hoge",sep="")  #-> "hoge1hoge"

このようにsepプションで区切り文字を無しに指定すると、そのままつながる。

ちなみに、paste関数で生成された文字列は単なる文字列として扱われるため、
例えば既存のオブジェクトと同じ名前を作ったとしても評価されない。

オブジェクトとして評価させたい場合は,eval(parse(text=...))を使う。

tmp = "success"
eval(parse(text=paste("t","m","p",sep=""))) #-> "success"

これでオブジェクトとして認識されます。

パスワードジェネレータpwgenをUbuntuで使う

CentOSなどではmkpasswdが使えると思うんだけど、ubuntuには無いようだ。

調べたところpwgenというのが一般的らしい。
まずはインストール

$ sudo apt-get install pwgen

インストール完了。簡単な使い方は

# 5文字のパスワードを1つ表示
$ pwgen 5 1
yaCh9

パスワードの長さを変えたい時は第一引数をかえれば良い。
デフォルとだと、英数字大文字小文字の集合ができるようだ。

ちなみによく使いそうなオプションはこちら。

オプション 効果
-s ランダムに生成する。デフォルトでは「覚えやすい」物を出力する。
-B 紛らわしい文字を使わない。1とlのような。
-y 記号を含める。
-0 数字を含めない。
-A 大文字を含めない。
-h ヘルプを表示。

read.tableでのfactor型生成を防ぐ方法

read.tableは各種の外部データを読み込んでくれる非常に便利な関数だが、
そのまま使うと、Factor型で読み込みが行なわれてしまう。

今までFactorで読み込んだ後文字列に直していたが、
読み込むときにオプションをつければその手間は防げる事に今更気づいた。

例えば、Tabで区切られたtxtデータを読み込む際には、

read.table("xxx.txt"sep="¥t",stringsAsFactors=F)

のように

stringsAsFactors

をFALSEにしてやれば文字列として読み込みを行なってくれる。

標準の編集エディタ変更

crontabやvisudoで標準起動するエディタを変更したい事が有る。

そんなときは、

$ select-editor

で標準の編集エディタを変更できる。ubuntuはデフォルトがnanoだったので、
これを使ってvimに変更。

UbuntuでR:その2~作業ディレクトリの行方~

引き続きUbuntuでRを動かしてみる。作業ディレクトリで少しはまった。

まずはRを起動。起動時のカレントディレクトリは/home/ubuntu/
# ubuntuという名前のユーザで作業。

$ pwd
/home/ubuntu
$ R

これでRが起動された。csvを読み込む。

stocklist.t1 <- read.csv("tosho-1.csv")
# tosho-1.csvは東証1部の株式コード一覧。
ls()
[1] "stocklist.t1"

csvが読み込まれているので、このまま終了。

q()
Save workspace image? [y/n/c]: y

これで.RDataが作られて作業スペースが保存されているはず。
同じディレクトリでRを起動すると、ちゃんと作業スペースが自動で読み込まれていた。
ただし、カレントディクトリを変更してRを起動すると読み込まれない。

作業ディレクトリはどうなっているのか確認してみる。再び/home/ubuntuでRを起動。

getwd()
[1] "/home/ubuntu"

/home/ubuntu配下の.RDataが読み込まれ、/home/ubuntuが作業ディレクトリに。
.RDataと.RHistoryを削除して再度やってみる。

getwd()
[1] "/home/ubuntu"

消してからやっても結果は同じ。
どうやらカレントディレクトリ配下の.RDataを探しに行って、.RDataが無い時はカレントディレクトリをデフォルトの作業ディレクトリとして認識するようだ。
どこからでも同じ作業ディレクトリで起動したいのであれば環境変数なりで調整する必要がありそう。

UbuntuでR:その1~文字コードの変換~

今までWindowsでしかRは使っていなかったけれども、Ubuntuでも使用してみる。
Rパッケージインストール時に他のコンポーネントをインストールしなくてはいけなかったりする。

これは細かいお話の一つだが、Windowsで扱っていたcsvファイルをそのまま読み込もうとすると。

read.csv("xxx.csv")

エラー。

Error in make.names(col.names, unique = TRUE) :
  invalid multibyte string at '<93><fa><95>t'

恐らく文字コードの問題。
真っ新な環境のため変換ツールも入っていない。nkfをインストール。

$ sudo apt-get install nkf

インストール完了。UTF-8に変換。

$ nkf -w8 --overwrite xxx.csv

上書きしてUTF-8に変換。もう一度Rで読み込んでみる。

read.csv("xxx.csv")

(表示は省略)無事読み込めた。