Передача вычисленного выражения в виде именованного аргумента функции в функцию (R)

Я хотел бы расширить data.frame, включив в него новый столбец и дать этому столбцу динамически назначенное имя, переданное в функции. Вот упрощенный пример:

passMyName <-function(df, newColTitle) {
  df2 <-data.frame(df, newColTitle = rep(NA, nrow(df)))
  return(df2)
}

randomDF <-data.frame(a=1:3, b=4:6, c=7:9)
passMyName(randomDF, myCustomColTitle)

Это добавит новый столбец в data.frame с именем переменной, определенной функцией "newColTitle". Вместо этого я хотел бы оценить newColTitle как "myCustomColTitle" и передать его в качестве именованного тега для этого нового столбца, чтобы выходной файл data.fram содержал новый столбец с именем "myCustomColTitle".

Это возможно? Возможно через substitute(), deparse(), quote(), eval(), paste() и т.д. Вы можете предположить, что я прочитал следующий учебник по этому типу темы (на самом деле, несколько раз):

http://adv-r.had.co.nz/Computing-on-the-language.html

Но некоторые детали не совсем прилипли ко мне.

Спасибо

1 ответ

Решение

Я думаю, что это будет иметь больше смысла, если вы передадите новое имя как символьное значение. Например

passMyName <-function(df, newColTitle) {
  df2 <- cbind(df, setNames(list(rep(NA, nrow(df))), newColTitle))
  return(df2)
}

randomDF <-data.frame(a=1:3, b=4:6, c=7:9)
passMyName(randomDF , "myCustomColTitle")

но если вы действительно хотите использовать неоцененное выражение, вы можете использовать

passMyName <-function(df, newColTitle) {
  newColTitle <- deparse(substitute(newColTitle))
  df2 <- cbind(df, setNames(list(rep(NA, nrow(df))), newColTitle))
  return(df2)
}

randomDF <-data.frame(a=1:3, b=4:6, c=7:9)
passMyName(randomDF, myCustomColTitle)
Другие вопросы по тегам