Передача вычисленного выражения в виде именованного аргумента функции в функцию (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)