将评估的表达式作为命名 arg 传递给函数 (R) 中的函数
Passing an evaluated expression as named arg to function within function (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)
这将使用函数 "newColTitle" 定义的变量名称向 data.frame 添加一个新列。相反,我想将 newColTitle 评估为 "myCustomColTitle" 并将其作为此新列的命名标记传递,以便输出 data.fram 包含一个名为 "myCustomColTitle".[=17= 的新列]
这可能吗?也许通过 substitute()
、deparse()
、quote()
、eval()
、paste()
等。您可以假设我已经阅读了以下关于此类主题的入门文章(实际上几次):
http://adv-r.had.co.nz/Computing-on-the-language.html
但有些细节并没有让我印象深刻。
谢谢
我认为如果您将新名称作为字符值传递进来会更有意义。例如
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)
我想扩展 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)
这将使用函数 "newColTitle" 定义的变量名称向 data.frame 添加一个新列。相反,我想将 newColTitle 评估为 "myCustomColTitle" 并将其作为此新列的命名标记传递,以便输出 data.fram 包含一个名为 "myCustomColTitle".[=17= 的新列]
这可能吗?也许通过 substitute()
、deparse()
、quote()
、eval()
、paste()
等。您可以假设我已经阅读了以下关于此类主题的入门文章(实际上几次):
http://adv-r.had.co.nz/Computing-on-the-language.html
但有些细节并没有让我印象深刻。
谢谢
我认为如果您将新名称作为字符值传递进来会更有意义。例如
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)