我正在尝试在列表中的对象中使用赋值.我想做的是改变一些元素.例如:
x <- list()
x$test <- 1
assign("x$test", 2)
x$test == 1
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?我需要使用assign,因为我正在构建一个函数,它将列表(x)中的对象的名称作为输入.
mat*_*fee 14
看起来你运气不好.从帮助文件:
'assign'不调度赋值方法,因此它不能用于设置向量,名称,属性等元素.
请注意,对附加列表或数据框的分配会更改附加副本而不是原始对象:请参阅"附加"和"附带".
如果你names(x)作为输入传递,你不能使用:
nms <- names(x)
for ( n in nms )
x[[n]] <- 'new_value'
Run Code Online (Sandbox Code Playgroud)
另外,您打算让您的函数修改一些全局变量吗?例如:
x <- list(test=1)
f <- function(...)
x$test <- 2
f() # want x$test = 2 ??
Run Code Online (Sandbox Code Playgroud)
因为这不起作用(范围问题).你可以使用一些脚步(<<-),但这通常被认为是不好的做法,因为很容易将无意的错误输入你的代码.
如果您能举例说明为什么要使用此功能/它将用于何种用途,我们可以帮助您找到替代解决方案.
看看分配给"x $ test"时会发生什么:
x <- list()
x$test <- 1
assign("x$test", 2)
ls()
[1] "x" "x$test"
Run Code Online (Sandbox Code Playgroud)
"x"中的元素"test"仍然是1,你用它提取它,x$test但是get("x$test")它将是该名称的值2.
为什么不直接使用这些名字?即
this.name <- "test"
x[[this.name]] <- 2
Run Code Online (Sandbox Code Playgroud)