如何在列表列表的每个元素上执行相同的功能(此处:load.image)?
起点是两个列表的列表:
list1 <- list(c("Group1", "Group2", "Group3"))
list2 <- list(c("GroupA", "GroupB", "GroupC"))
list.all <- c(list1,list2)
我编写了这个迭代地应用lapply的函数:
images.list.function <- lapply(
designs.path.list,
FUN = function(secondlevel.list)
lapply(secondlevel.list, function(x) load.image(x))
)
# read all jpgs into a list
images.list <- images.list.function
images.list
这是正常的,但我想要一种独立于级别数的格式,因为将来可能会添加第三或第四级。
有什么优雅的想法吗?
答案 0 :(得分:2)
我找到了一个比R. Schifini优雅的解决方案还要简单的新解决方案,所以现在我回答自己的问题:)
apply系列还提供了一个称为rapply
的递归版本,它在嵌套列表上非常有效,请参见these examples。
将其应用于该问题,解决方案很简单:
images.list <- rapply(designs.path.list, load.image)
这就是全部。
答案 1 :(得分:1)
这有用吗?
flatList = unlist(list.all)
[1] "Group1" "Group2" "Group3" "GroupA" "GroupB" "GroupC"
使用unlist
,您最终会得到一个向量。然后使用lapply
和图像加载功能。
例如,使用paste
函数将"-image"
添加到每个名称:
d = lapply(flatList, function(x){paste(x, "-image", sep = "")})
> d
[[1]]
[1] "Group1-image"
[[2]]
[1] "Group2-image"
[[3]]
[1] "Group3-image"
[[4]]
[1] "GroupA-image"
[[5]]
[1] "GroupB-image"
[[6]]
[1] "GroupC-image"
答案 2 :(得分:0)
我喜欢R. Schifini的答案。但是,仅需一点点调味,您也可以访问do.call。
只需反复执行一次do调用即可:
do.call(c,do.call(c,list.all))...
应该为您提供所有项目的向量...