[英]How to pass dynamic column name to h2o arrange function
給定帶有數字列col的h2o
數據幀df,如果專門定義了列,則col的df排序:
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
事實證明這很棘手,但你可以使用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
來獲得它 。 到目前為止,你已經實現了75%的h2o.arrange()
。
(請記住,任何時候你最終使用h2o:::
你冒的風險是它在以后的某個版本的H2O中不起作用。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.