R:变量名列表元素

时间:2014-06-24 12:03:36

标签: r list-manipulation

之前可能已经被问到并且我看过一些类似的问题,但我想根据语句中变量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

可能相当微不足道,但我该如何解决这个问题?

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