访问julia DataFrames包中的Rvector类型

时间:2016-06-21 21:31:44

标签: r dataframe julia

我正在尝试做一些非常简单的事情 - 只需在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?

3 个答案:

答案 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"])