在环境中分配列表属性

gap*_*ppy 7 environment r

标题是自成一体的问题.一个例子澄清了它:考虑一下

x=list(a=1, b="name")
f <- function(){
    assign('y[["d"]]', FALSE, parent.frame() )
}
g <- function(y) {f(); print(y)}

g(x)

$a
[1] 1

$b
[1] "name"
Run Code Online (Sandbox Code Playgroud)

而我想得到

g(x)

$a
[1] 1

$b
[1] "name"

$d
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

一些评论.我知道我的原始例子中有什么问题,但我用它来明确我的目标.我想避免使用<< - ,并希望在父框架中更改x.

我认为我对环境的理解是原始的,任何引用都是值得赞赏的.

G. *_*eck 7

第一个参数assign必须是变量名,而不是表达式的字符表示.尝试替换f为:

f <- function() with(parent.frame(), y$d <- FALSE)
Run Code Online (Sandbox Code Playgroud)

请注意a,b并且d是列表组件,而不是列表属性.如果我们想在父框架中添加一个属性"d",我们会这样做:yf

f <- function() with(parent.frame(), attr(y, "d") <- FALSE)
Run Code Online (Sandbox Code Playgroud)

另外,请注意,根据您想要做的事情,它可能(或可能不)更好地x成为环境或proto对象(来自proto包).