Передайте имя столбца data.frame функции
Я пытаюсь написать функцию для принятия data.frame (x
) иcolumn
от него. Функция выполняет некоторые вычисления для x и позже возвращает еще один data.frame. Я застрял на методе передового опыта, чтобы передать имя столбца в функцию.
Два минимальных примераfun1
а такжеfun2
ниже производят желаемый результат, имея возможность выполнять операции наx$column
, с помощьюmax()
В качестве примера. Тем не менее, оба полагаются на, по-видимому (по крайней мере для меня) неэлеганс
substitute()
и, возможно,eval()
необходимость передавать имя столбца как символьный вектор.fun1 <- function(x, column){
do.call("max", list(substitute(x[a], list(a = column))))
}
fun2 <- function(x, column){
max(eval((substitute(x[a], list(a = column)))))
}
df <- data.frame(B = rnorm(10))
fun1(df, "B")
fun2(df, "B")
Я хотел бы иметь возможность вызывать функцию какfun(df, B)
, например. Другие варианты, которые я рассмотрел, но не пробовал:
column
как целое число номера столбца. Я думаю, что этого избежатьsubstitute()
, В идеале, функция может принять либо.with(x, get(column))
, но, даже если это работает, я думаю, что это все еще потребуетsubstitute
Использоватьformula()
а такжеmatch.call()
, ни один из которых у меня нет большого опыта.подвопрос: Являетсяdo.call()
предпочтительнееeval()
?