Передайте имя столбца 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()?

Ответы на вопрос(5)

Ваш ответ на вопрос