JuliaConnectoR:将数据框从R转换为Julia

s4n0splo  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(105)

假设我们在R中有一个dataframe,就像这个一样,但要大得多:

planets = data.frame(
    name = c("mercury", "venus", "earth", "mars"),
    distance = c(57.91, 108.21, 146.60, 227.94),    # in million km
    period = c(87.97, 224.70, 365.26, 779.94),      # in earth days
    has.moons = c(FALSE, FALSE, TRUE, TRUE)
)
planets
##      name distance period has.moons
## 1 mercury    57.91  87.97     FALSE
## 2   venus   108.21 224.70     FALSE
## 3   earth   146.60 365.26      TRUE
## 4    mars   227.94 779.94      TRUE

字符串
JuliaConnectoR的帮助下,我想将此dataframe传输到Julia,并将'DataFrames' Julia模块中的函数应用于它,例如describe函数。但不知何故,我似乎不明白它背后的机制(或哲学)。

library(JuliaConnectoR)
DataFrames <- juliaImport("DataFrames")
## Starting Julia ...


以下三个电话

DataFrames$describe(planets)
juliaLet("DataFrames.describe(df)", df = planets)
juliaCall("DataFrames.describe", planets)


都将生成以下错误消息

## Error: Evaluation in Julia failed.
## Original Julia error message:
## MethodError: no method matching describe(::Main.RConnector.RDataFrame)


juliaPut生成代理对象并不能改善这种情况,也就是说,会弹出类似的错误消息。

planets_jl <- juliaPut(planets)
planets_jl
## <Julia object of type Main.RConnector.RDataFrame>
## Main.RConnector.RDataFrame with 4 rows, 4 columns, and an unknown schema.


目前,我通过在R中将 Dataframe 存储到'feather'文件中并将其加载到Julia中来解决这个问题,因此'planets'是Julia环境中的纯Julia对象。

q9rjltbz

q9rjltbz1#

您必须创建一个Julia DataFrame,然后可以与desribe一起使用。

planets = data.frame(
    name = c("mercury", "venus", "earth", "mars"),
    distance = c(57.91, 108.21, 146.60, 227.94),    # in million km
    period = c(87.97, 224.70, 365.26, 779.94),      # in earth days
    has.moons = c(FALSE, FALSE, TRUE, TRUE)
)

library(JuliaConnectoR)
DataFrames <- juliaImport("DataFrames")

DF <- DataFrames$DataFrame(planets)
DataFrames$describe(DF)
#<Julia object of type DataFrames.DataFrame>
#4×7 DataFrame
# Row │ variable   mean     min    median   max     nmissing  eltype
#     │ Symbol     Union…   Any    Union…   Any     Int64     DataType
#─────┼────────────────────────────────────────────────────────────────
#   1 │ name                earth           venus          0  String
#   2 │ distance   135.165  57.91  127.405  227.94         0  Float64
#   3 │ period     364.467  87.97  294.98   779.94         0  Float64
#   4 │ has.moons  0.5      false  0.5      true           0  Bool

DataFrames$select(DF, juliaExpr("(1)"))
#<Julia object of type DataFrames.DataFrame>
#4×1 DataFrame
# Row │ name
#     │ String
#─────┼─────────
#   1 │ mercury
#   2 │ venus
#   3 │ earth
#   4 │ mars

juliaCall("first", DF)
#<Julia object of type DataFrames.DataFrameRow{DataFrames.DataFrame, DataFrames.Index}>
#DataFrameRow
# Row │ name     distance  period   has.moons
#     │ String   Float64   Float64  Bool
#─────┼───────────────────────────────────────
#   1 │ mercury     57.91    87.97      false

字符串

相关问题