gpt4 book ai didi

r - 使用 HDF5 保存 Julia 数据帧以在 R 中读取

转载 作者:行者123 更新时间:2023-12-04 10:53:59 25 4
gpt4 key购买 nike

虽然在 Julia 中读取 R 数据集已经受到足够的关注,但有时在 Julia 中完成的计算结果需要 R 可读。为了实现这一点,我试图保存一个 DataFrame.jl HDF5 文件中的对象。这是到目前为止的代码,在当前可用的限制范围内编写 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 中重新组装的东西,在此过程中丢失了一些列类型(例如 bool 值不起作用)?

最佳答案

当我被指向 RCall.jl 时,列类型限制的问题已解决包裹。这个包对整合 Julia 和 R 的工作非常有帮助。在这个例子中,不是保存 HDF5,而是创建一个原生的 RData 文件:

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)"))

关于r - 使用 HDF5 保存 Julia 数据帧以在 R 中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28084403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com