簡體   English   中英

如何將動態列名傳遞給h2o排列函數

[英]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)

我不想硬編碼列名。 有什么辦法可以解決嗎? 謝謝。

根據Darren的要求添加了一個例子

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM