为什么';t将()值赋给在R中工作的列表元素?

为什么';t将()值赋给在R中工作的列表元素?,r,list,assign,R,List,Assign,我试图在列表中的对象中使用赋值。我想做的是改变一些元素。例如: x <- list() x$test <- 1 assign("x$test", 2) x$test == 1 [1] TRUE x看来你运气不好。从帮助文件: “assign”不分派分配方法,因此不能用于 设置向量、名称、属性等元素 请注意,指定给附加列表或数据框会更改 附加副本而非原始对象:请参见“附加”和“随附” 如果您将名称(x)作为输入传递,您不能使用: nms <- names(x) for

我试图在列表中的对象中使用赋值。我想做的是改变一些元素。例如:

x <- list()
x$test <- 1
assign("x$test", 2)
x$test == 1
     [1] TRUE

x看来你运气不好。从帮助文件:

“assign”不分派分配方法,因此不能用于 设置向量、名称、属性等元素

请注意,指定给附加列表或数据框会更改 附加副本而非原始对象:请参见“附加”和“随附”

如果您将
名称(x)
作为输入传递,您不能使用:

nms <- names(x)
for ( n in nms )
    x[[n]] <- 'new_value'

nms查看分配给“x$test”时会发生什么:

您是否尝试过另一种解决方案是:

x <- list()
x$test <- 1
assign("x$test", 2)
x$test == 1
TRUE
eval(parse(text="x$test<-2"))
x$test == 1
FALSE

x太好了,非常感谢——我不知道我可以使用[[n]]语法,这已经足够了。非常感谢您提供的信息。套用Thomas Lumley的话:“如果答案是parse(),您通常应该重新思考这个问题。”如果有更合理的解决方案,请始终避免这样的构造。这里的解决方案是
[[
我不知道为什么另一个答案被接受,但正如mdsumner所说的,为什么不直接使用这个名称呢?这绝对是完美的。assign()允许您指定分配发生的环境,这可能非常有用。这与请注意的是,
x$test
x[['test']]
之间有很大区别。请参阅上的文档
x <- list()
x$test <- 1
assign("x$test", 2)
ls()
[1] "x"      "x$test"
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