Как передать динамическое имя столбца в функцию h2o - PullRequest
0 голосов
/ 30 апреля 2018

Учитывая h2o датафрейм df с числовым столбцом col, сортировка df по 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

1 Ответ

0 голосов
/ 26 июля 2018

Оказывается, это довольно сложно, но вы можете получить динамическое имя столбца для оценки, используя 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.)

...