之前可能已经被问到并且我看过一些类似的问题,但我想根据语句中变量varname
的名称来命名我的列表元素
m=list(list(a=1,b=2),list(a=1,b=2))
v=1:length(m)
varname="c"
m=lapply(1:length(m), function(i) modifyList(m[[i]],list(varname=v[[i]])))
其中m
是嵌套列表,v
是相同长度的矢量。
问题是这会返回名为varname
而不是"c"
的子列表:
m
[[1]]
[[1]]$a
[1] 1
[[1]]$b
[1] 2
[[1]]$varname
[1] 1
[[2]]
[[2]]$a
[1] 1
[[2]]$b
[1] 2
[[2]]$varname
[1] 2
可能相当微不足道,但我该如何解决这个问题?
答案 0 :(得分:3)
m=list(list(a=1,b=2),list(a=1,b=2))
v=1:length(m)
varname="c"
这将有效:
m2=lapply(1:length(m),
function(i) modifyList(m[[i]],setNames(list(v[[i]]),varname)))
或
m2=mapply(function(x,y) {x[[varname]] <- y; x},m,v,SIMPLIFY=FALSE)
答案 1 :(得分:1)
我无法评论David Arenburg上面的评论,但如果你这样做,你可以调整它以得到一个名字的矢量。
m=list(list(a=1,b=2),list(a=1,b=2))
v=1:length(m)
varname=c('Var1','Var2')
names(m) <- rep(varname, length(m)/length(varname))
m
现在看起来像这样:
$Var1
$Var1$a
[1] 1
$Var1$b
[1] 2
$Var2
$Var2$a
[1] 1
$Var2$b
[1] 2
您可以调用列表中的值,就像调用数据帧(使用$
)一样:
m$Var1$a
将返回1