我有一个父函数(fun1
),它使用data
和一个辅助函数(fun2
)来操作data
的列。我想将该辅助函数的值分配给它data
中fun1
的匹配列。实际上有很多小的辅助函数在列上运行,我希望fun2
改变的值是其他辅助函数处理的值。
如何从fun2
中取出广告并将其分配到data
中fun1
的匹配列?我不想进行更改到data
中的fun1
,但想要在data
内更改fun2
。
fun1 <- function(data){
Map(fun2, data, colnames(data))
data[[1]]
}
fun2 <- function(x, colname_x){
x <- x * 2
# my attempt to assign to `data[["mpg"]]`
assign(sprintf("data[[\"%s\"]]", colname_x), value=x, pos = 1)
}
fun1(mtcars[1:3])
fun1
的所需输出:
## [1] 42.0 42.0 45.6 42.8 37.4 36.2 28.6 48.8 45.6 38.4 35.6 32.8 34.6 30.4 20.8
## [16] 20.8 29.4 64.8 60.8 67.8 43.0 31.0 30.4 26.6 38.4 54.6 52.0 60.8 31.6 39.4
## [31] 30.0 42.8
编辑: 也尝试过:
fun2 <- function(x, colname_x = "mpg"){
x <- x * 2
assign(sprintf("data[[\"%s\"]]", colname_x), value=x, env = parent.frame(3))
}
编辑2 这有效,但似乎不那么干净: “
fun2 <- function(x, colname_x = "mpg"){
x <- x * 2
data <- get('data', env=parent.frame(3))
data[[colname_x]] <- x
assign('data', value=data, env = parent.frame(3))
}