我有一个两个嵌套的循环,我想用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的长度可能会改变。 我很感激,如果有人能给我一些暗示。
答案 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