R 为父环境内的数据帧赋值
我有一个父函数(R 为父环境内的数据帧赋值,r,R,我有一个父函数(fun1)和一个辅助函数(fun2),前者获取数据,后者对该数据的列进行操作。我想将该helper函数中的值分配给data中fun1的匹配列。实际上,有很多小助手函数在列上操作,我希望通过fun2更改的值是其他助手函数处理的值 如何从fun2中取出数据并将其分配到fun1中的data的匹配列?我不想对fun1中的数据进行更改,但想从fun2中更改数据 fun1 <- function(data){ Map(fun2, data, colnames(data))
fun1
)和一个辅助函数(fun2
),前者获取数据,后者对该数据的列进行操作。我想将该helper函数中的值分配给data
中fun1
的匹配列。实际上,有很多小助手函数在列上操作,我希望通过fun2
更改的值是其他助手函数处理的值
如何从fun2
中取出数据并将其分配到fun1
中的data
的匹配列?我不想对fun1
中的数据进行更改,但想从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])
编辑:也尝试了:
fun2 <- function(x, colname_x = "mpg"){
x <- x * 2
assign(sprintf("data[[\"%s\"]]", colname_x), value=x, env = parent.frame(3))
}
fun2为什么函数式编程(即返回结果并像往常一样分配)还不够好?撇开它不谈——很高兴看到高代表性的人还在问这样的问题。@Roland fair question。简单地说,我可以。这更是一个如何做到这一点的问题;在其他环境中分配给名人的学习。没有那么多a什么是最好的方法。很公平。无论如何,您不能使用assign
将数据[[“mpg”]]
分配给。您必须分配给数据
,即复制整个data.frame。为什么函数式编程(即返回结果并按常规分配)还不够好?放在一边-很高兴看到高代表性的人还在问这样的问题。@Roland fair question。简单地说,我可以。这更是一个如何做到这一点的问题;在其他环境中分配给名人的学习。没有那么多a什么是最好的方法。很公平。无论如何,您不能使用assign
将数据[[“mpg”]]
分配给。您必须分配给数据
,即复制整个data.frame。
fun2 <- function(x, colname_x = "mpg"){
x <- x * 2
assign(sprintf("data[[\"%s\"]]", colname_x), value=x, env = parent.frame(3))
}
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))
}