虽然阅读Julia中的R数据集已经得到了足够的关注,但有时在Julia中完成的计算结果需要对R可读。为了实现这一点,我试图在HDF5文件中保存DataFrame.jl对象。这是迄今为止的代码,是在当前可用的HDF5.jl方法的限制内编写的:
using DataFrames, HDF5
df = DataFrame(coln1 = 1:4, coln2 = ["M", "F", "F", "M"], coln3 = int8([1, 0, 1, 1]))
h5open("trydf.h5", "w") do file
g = g_create(file, "df") # create a group
for cnm in DataFrames._names(df)
g["$cnm"] = convert(Array, df[cnm])
end
attrs(g)["Description"] = "Julia DataFrame columns"
end
然后可以使用rhdf5包工具在R中重新组装数据帧。 是否有更优雅的方式来实现这一目标?有些东西不需要将数据帧分开并在R中重新组合,在此过程中丢失一些列类型(例如布尔值不起作用)?
答案 0 :(得分:1)
当我指向RCall.jl包时,列类型限制的问题已得到解决。这个包对于整合Julia和R工作非常有帮助。可以创建本机RData文件,而不是在此示例中保存HDF5:
using DataFrames
using RCall
# example DataFrame
df = DataFrame(coln1 = 1:4, coln2 = ["M", "F", "F", "M"], coln3 = [false, true, false, true], coln4 = int8([1, 0, 1, 1]))
# R environment in a session started from Julia
g = globalEnv
reval(rparse("dfls <- NULL"))
# add columns one at a time converting Julia vectors to R-types via RCall.sexp
# https://github.com/JuliaStats/RCall.jl/blob/master/src/sexp.jl
for cnm in DataFrames._names(df)
g[:colcnm] = sexp(convert(Array, df[cnm]))
reval(rparse("dfls\$$cnm <- colcnm"))
end
reval(rparse("df <- data.frame(dfls)"))
reval(rparse("save(file='dfjulia.RData', df)"))