我正在尝试在列表中的对象中使用赋值。我想做的是改变一些元素。例如:
x <- list()
x$test <- 1
assign("x$test", 2)
x$test == 1
[1] TRUE
有什么想法吗?我需要使用assign,因为我正在构建一个函数,它将列表(x)中的对象名称作为输入。
看来你运气不好。从帮助文件:
'assign' 不派发赋值方法,因此不能用于设置向量、名称、属性等元素。
请注意,分配给附加列表或数据框会更改附加副本而不是原始对象:请参阅“附加”和“与”。
如果您names(x)
作为输入传递,您不能使用:
nms <- names(x)
for ( n in nms )
x[[n]] <- 'new_value'
另外,您是否打算让您的函数修改一些全局变量?例如:
x <- list(test=1)
f <- function(...)
x$test <- 2
f() # want x$test = 2 ??
因为这不起作用(范围问题)。您可以通过一些步法<<-
(
如果您可以举例说明您为什么需要此功能/它将用于什么目的,我们可以帮助您找到替代解决方案。
看看当你分配给“x$test”时会发生什么:
x <- list()
x$test <- 1
assign("x$test", 2)
ls()
[1] "x" "x$test"
"x" 中的元素 "test" 仍然是 1,并且您将其提取为x$test
butget("x$test")
将是该名称中的值 2。
为什么不直接使用名称?IE
this.name <- "test"
x[[this.name]] <- 2
另一种解决方案是:
x <- list()
x$test <- 1
assign("x$test", 2)
x$test == 1
TRUE
eval(parse(text="x$test<-2"))
x$test == 1
FALSE
该eval(parse(text=""))
命令在这种情况下非常有用。
真挚地
你试过 <<- 吗?我昨天用它在一个帖子中的函数中为列表分配名称和值(请参阅“组合一系列数据框并为每个数据框创建新列”)。