1

可能以前被问过,我也看到过一些类似的问题,但我想根据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

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

4

2 回答 2

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)
于 2014-06-24T12:29:52.947 回答
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

于 2014-06-24T12:49:42.737 回答