使用lapply时如何在列表下列出名单?

时间:2015-07-10 20:01:09

标签: r nested-lists lapply names

我有一个两个嵌套的循环,我想用lapply而不是for循环来做。我编写了以下简单示例:

a<-as.list(c(1,2))  
b<-as.list(c(6,7))  
results<-lapply(a, function(x) lapply(b, function(y) x+y))

> results  
[[1]]  
[[1]][[1]]  
[1] 7  

[[1]][[2]]  
[1] 8  


[[2]]  
[[2]][[1]]  
[1] 8

[[2]][[2]]  
[1] 9

如何为此列表指定名称,我可以使用名称(结果)&lt; -a为第一级别指定名称,但我不知道如何为第二级别执行此操作。并且命名应该在循环中完成,因为在我的主程序中b的长度可能会改变。 我很感激,如果有人能给我一些暗示。

1 个答案:

答案 0 :(得分:3)

你应该注意lapply()本身只是一个构造良好的for()循环的包装器,所以你没有获得任何效率,只是可读性。除此之外,最简单的方法是将名称添加到嵌套lapply()调用的列表中:

a<-as.list(c(1,2))
b<-as.list(c(6,7)) 
names(a) <- c("a","b")
names(b) <- c("c", "d")
results<-lapply(a, function(x) lapply(b, function(y) x+y))

这种方法产生:

> results
$a
$a$c
[1] 7

$a$d
[1] 8


$b
$b$c
[1] 8

$b$d
[1] 9

您当然可以重命名嵌套组件,如下所示:

> names(results$a) <- c("e","f")
> results$a
$e
[1] 7

$f
[1] 8