我正在尝试做一些非常简单的事情 - 只需在R中保存一个矩阵并将其作为数组导入julia。它不应该那么难,但我正在努力操纵我将数据读入julia时创建的RVector
类型。
这是一个最小的例子。在R中,我运行以下脚本:
var1 <- matrix( runif(9), 3, 3 )
save( var1, file='~/temp/file1.rda')
然后在朱莉娅:
using DataFrames, DataArrays
x = read_rda("/home/squipbar/temp/file1.rda")
我想将x["var1"]
分配给julia工作区中的数组变量,让我们称之为z
。一种方法是将z
作为空矩阵启动,然后使用x
的元素填充它。
我遇到的问题是我无法访问x
的元素。在typeof
确认后,x
的类型为DataFrames.RVector{Float64,0x0e}
。这似乎不遵守朱莉娅索引的标准规则。
y = x["var1"] ;
y[1]
ERROR: MethodError: `getindex` has no method matching getindex(::DataFrames.RVector{Float64,0x0e}, ::Int32)
DataFrames
文档似乎没有提供RVector
类型的任何指导。有没有人有任何想法,我可以找到或如何访问元素的其他解释?更好的是,是否有一种简单的方法可以将矩阵从R传递给julia?
答案 0 :(得分:4)
是x["var1"].data
你想要的是什么?
julia> typeof(b)
DataFrames.RVector{Float64,0x0e}
julia> b.data
9-element Array{Float64,1}:
0.543234
0.0220151
0.867526
0.255187
0.710463
0.437579
0.168832
0.761667
0.600643
如果有NA,则或data(x["var1"])
答案 1 :(得分:2)
我认为最简单的方法是将矩阵保存为R中的文本文件,然后将其作为文本文件加载到Julia中。这里有没有理由不这样做?例如:
在R:
write.table(var1, file = "/path/to/temp.txt", sep="\t", row.names=FALSE, col.names=TRUE, quote=FALSE)
然后在朱莉娅:
using DataFrames
var1 = readtable("/path/to/temp.txt", separator ='\t');
这有一个额外的好处,如果你想检查它或它的一部分,你很容易在标准的文本编辑器中查看文件,很容易用另一个程序如python,轻松操作它与其他人分享等等。
答案 2 :(得分:2)
根据源文档here中的一些测试,看起来以下内容可以正常工作:如果您完全按照自己编写的方式使用代码,但在保存之前将R中的矩阵转换为数据框,然后在将其带入Julia后将结果转换为DataFrame。具体来说,那么
在R:
var1 <- data.frame(matrix( runif(9), 3, 3 ))
save( var1, file='/path/to/file1.rda')
然后在朱莉娅:
using DataFrames, DataArrays
x = read_rda("/path/to/file1.rda")
y = DataFrame(x["var1"])