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))

}