我尝试更改R中列表L[[2]]
中的特定组件L
。不幸的是,列表中的其他组件L[[1]]
也发生了变化。下面是一个最小的工作示例:
# initialize list L:
L <- matrix(list( matrix(0,1,2) ), 2, 1)
# show that L[[1]] = c(0,0):
print(L[[1]][1,])
#>[1] 0 0
# only change L[[2]] into c(1,1):
L[[2]][1,] <- 1
# however L[[1]] has changed too to c(1,1):
print(L[[1]][1,])
#>[1] 1 1
(也许这是一个基本问题,因为我不是R的专家。)
针对Akrun的评论:
当我在R-studio的编辑器中一口气运行完整代码 时,L[[1]]
中的更改就会发生。当我在命令行一次运行一次时运行这四个命令时,L[1]
中的更改不会发生。对我来说似乎很奇怪。
答案 0 :(得分:2)
有多种解决方法。就像我们在常规list
中所做的那样,该结构有些复杂,难以进行更改。它是一个list
,具有由matrix
赋予的尺寸属性,并且由于list
是matric
es
1) list
对象是在matrix
中创建的,它是list
中的matrices
。因此,我们可以基于对matrix
的元素进行子集分配值,然后提取list
组件以将其分配给1
L[2][[1]][] <- 1
print(L[[1]][1,])
#[1] 0 0
2)另一个选择是创建一个临时list
对象并在list
上分配值,稍后用更改后的{{ 1}}
matrix/list