今回は はじめてのR の「3章 データファイルの読み込み・Rエディタの利用」を RCLでやってみるけぇね。
- 作者: 村井潤一郎
- 出版社/メーカー: 北大路書房
- 発売日: 2013/10/03
- メディア: 単行本
- この商品を含むブログを見る
目次
1.全てのオブジェクトを削除する。
2.作業ディレクトリへの操作。
3.CSVファイルの読み込み。
4.CSVファイルを入力にした簡単な統計関数の実行。
全てのオブジェクトを削除する。
>(r "rm" "list=ls()") NIL
ってこれでイケとるんかな。確かめる方法が良くわからん。
まぁ、面倒じゃけぇ今回はエエわ。 エラーにならんかったし。
作業ディレクトリへの操作。
作業ディレクトリの取得、変更は getwd, setwd でできるけぇ。
getwd はこんな感じ。
R> (r "getwd") ("/home/user/junk") R> [getwd] ("/home/user/junk")
setwd はこんな感じ。
R> (r "setwd" "/tmp/") ("/home/yanqirenshi/junk") R> (r "getwd") ("/tmp") R> [setwd "~/tmp/"] ("/tmp") R> [getwd] ("/home/yanqirenshi/tmp")
CSVファイルの読み込み。
CSVの内容は書籍の内容を拝借。感謝!!
今回のファイルは /home/user/tmp/test.csv に置くことにするけぇ。
number,sex,testA,testB 1,f,56,51 2,f,67,45 3,m,43,72 4,m,19,70 5,m,38,59 6,f,56,72 7,m,54,82 8,f,81,66 9,m,67,49 10,f,63,37
CSVファイルの読み込みはフルパスしてもええし、作業ディレクトリに置いとるんならファイル名でもええんよ。 あんたの好きにしんさい。
(1) フルパスの場合 /home/user/tmp/test.csv (2) 作業ディレクトリに置いとる場合 test.csv ./test.csv
CSVの読み込みは read.csv でやるんじゃけど、何も考えんと実行するとエラーが発生するけぇね。 気をつけんとイケよ。
こんとな感じになるけぇ。
(r "read.csv" "/home/yanqirenshi/tmp/test.csv") ---- debugger ---- Control stack exhausted (no more space for function call frames). This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away. PROCEED WITH CAUTION. [Condition of type SB-KERNEL::CONTROL-STACK-EXHAUSTED] Restarts: 0: [RETRY] Retry SLIME REPL evaluation request. 1: [*ABORT] Return to SLIME's top level. 2: [ABORT] Abort thread (#<THREAD "repl-thread" RUNNING {10043200B3}>) Backtrace: 0: (SB-KERNEL::CONTROL-STACK-EXHAUSTED-ERROR) 1: ("foreign function: call_into_lisp") 2: ("foreign function: post_signal_tramp") --more--
どがぁなことしても出来んかったけぇ困ってしもぉてね。作ったカルロスさんにメールで聞いたいね。
ほしたら rcl は R のオブジェクトを lispオブジェクト に変換する機能が弱いらしゅうて、無限ループに入ってしまうんじゃって。
なるほど、前回で factor型が integer型になっとたんもその所為じゃったんじゃね。
回避策のコードもくれたんじゃけど、強引な感じじゃったし オススメじゃないみたいじゃって。
カルロスさんのオススメはイチイチ lispオブジェクトに変換せんでもええけぇ、Rの中でやりんさいって言っとった。 lispオブジェクトに変換してもRには戻せんのんじゃけぇね。って。(たぶん)
じゃけぇ以下の方法でポインタ取得したらエエみたい。
r% を使ぉたら lispオブジェクトにせんと Rのポインタだけ返すんじゃって。
;; こんな感じ。 R> (r% "read.csv" "/home/yanqirenshi/tmp/test.csv") #<R-POINTER :GENERIC-VECTOR #.(SB-SYS:INT-SAP #X7FFFE8643800) {1011FC5FE3}>
それを変数に入れて印刷するとこんな感じ。 変数に入れるんも r% を使わんにゃぁイケンよ。じゃないと lispオブジェクトに変換しようとするけぇね。
R> (r% "<-" "テストデータ" (r% "read.csv" "/home/yanqirenshi/tmp/test.csv")) #<R-POINTER :GENERIC-VECTOR #.(SB-SYS:INT-SAP #X7FFFE8380F40) {10124979C3}> R> (r "print" (r-variable "テストデータ")) ;R# number sex testA testB ;R# 1 1 f 56 51 ;R# 2 2 f 67 45 ;R# 3 3 m 43 72 ;R# 4 4 m 19 70 ;R# 5 5 m 38 59 ;R# 6 6 f 56 72 ;R# 7 7 m 54 82 ;R# 8 8 f 81 66 ;R# 9 9 m 67 49 ;R# 10 10 f 63 37 #<R-DATAFRAME 4 rows, column names :|number| :|sex| :|testA| :|testB| {10127DCBA3}> R> (r "dim" (r-variable "テストデータ")) (10 4)
とりあえずこれはクリア。
ほんま、キチんとメールに返信くれたカルロスさんにぶち多謝じゃけぇ!!
CSVファイルを入力にした簡単な統計関数の実行。
なんか上手いこといかん。。。。カルロスさんに聞いてみよう。。。。
今度加筆するわ。。。
次回へ
つぎは記述統計じゃね。
でも上の先送りしたやつ使えんと困るねぇ。。。
ほいじゃぁ、またね。