0

RinRuby gem を使用して、Ruby で R を操作しています。問題は、RinRuby で R から Ruby に文字または数値を含むベクトルしか渡せないことですが、data.frame を渡したいのです。

私の最初のアイデアは、data.frame を JSON オブジェクトに変換することでした。これにより、R から Ruby に文字列として渡し、ハッシュに変換することができました。しかし、この解決策は非常に複雑なようです。

誰かがより良いアイデアを持っていますか?

4

2 に答える 2

2

「RinRuby の代わりに Rserve-Ruby-client を使用する」ことがより良いアイデアと見なされるかどうかはわかりません。おそらく、RinRuby を使用する正当な理由があるのでしょう。ただし、Rserve クライアントを使用して、データ フレームを Ruby 配列に変換できます。

require 'rserve'
con = Rserve::Connection.new
df1 = con.eval("data.frame(a = c(1:10), b = c(11:20))")
df1 = df1.to_ruby
#<Array:69904955249600 [a=12345678910, b=11121314151617181920]>
df1['a']
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
于 2013-02-10T01:49:53.010 に答える
1

dump または dput 関数を使用して、R オブジェクトの ASCII 表現を返すことができます。

> dump('dat', file="")
dat <-
structure(list(group = structure(c(1L, 1L, 2L, 2L), .Label = c(" pilot01", 
" pilot02"), class = "factor"), val2 = structure(c(1L, 2L, 1L, 
2L), .Label = c("t1", "t3"), class = "factor"), val1 = c(429.226015, 
693.795607, 262.798468, 325.854107), val1time = structure(c(29229.226015, 
29493.795607, 29062.798468, 29125.854107), class = c("POSIXct", 
"POSIXt"))), .Names = c("group", "val2", "val1", "val1time"), row.names = c(NA, 
-4L), class = "data.frame")
> dput(dat)
structure(list(group = structure(c(1L, 1L, 2L, 2L), .Label = c(" pilot01", 
" pilot02"), class = "factor"), val2 = structure(c(1L, 2L, 1L, 
2L), .Label = c("t1", "t3"), class = "factor"), val1 = c(429.226015, 
693.795607, 262.798468, 325.854107), val1time = structure(c(29229.226015, 
29493.795607, 29062.798468, 29125.854107), class = c("POSIXct", 
"POSIXt"))), .Names = c("group", "val2", "val1", "val1time"), row.names = c(NA, 
-4L), class = "data.frame")

R のデータフレームは、行名と列名を含む単なるリストです。Rubyには、日時ベクトルとリストのデータ型がありますか? もしそうなら、リスト構造を分解するのはかなり簡単です。別の方法は、(R 環境で) を使用lapplyして、Ruby で再アセンブルする RinRuby 操作を列単位で実行することです。

于 2013-02-10T01:45:00.827 に答える