标题是自成一体的问题.一个例子澄清了它:考虑一下
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.
我认为我对环境的理解是原始的,任何引用都是值得赞赏的.
第一个参数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包).
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |