给定带有数字列col的h2o
数据框df,如果专门定义了列,则df by col的种类会起作用:
h2o.arrange(df, "col")
但是当我传递动态变量名时,排序并不起作用:
var <- "A"
h2o.arrange(df, var)
我不想对列名进行硬编码。有什么办法可以解决吗?感谢。
library(h2o)
h2o.init()
df <- as.h2o(cars)
var <- "dist"
h2o.arrange(df, var) # got error
h2o.arrange(df, "dist") # works
答案 0 :(得分:1)
事实证明这很棘手,但是您可以使用call()
获取要评估的动态列名称。因此,从您的示例继续:
var <- "dist"
eval(call("h2o.arrange",df,var))
礼物:
speed dist
1 4 2
2 7 4
3 4 10
4 9 10
然后:
var <- "speed"
eval(call("h2o.arrange",df,var))
礼物:
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
(我很想说这是我想到的第一件事,但它更像是实验编号54!我快到一半了http://adv-r.had.co.nz/Expressions.html,也许还有其他更好的方法可以实现相同的目标东西。)
另外,获得相同结果的另一种方法是:
var = 1
h2o:::.newExpr("sort", df, var)
和
var = 0
h2o:::.newExpr("sort", df, var)
分别。即第三个参数是列的从零开始的索引。您可以使用match(var, names(df)) - 1
来获得 that 。至此,您已经实现了h2o.arrange()
的75%。
(请记住,每次您最终使用h2o:::
时,都有冒着在将来的H2O版本中无法使用的风险。)