我构建了我的功能(这么长而复杂)。我的函数的输出是两个列表的列表。为了使我的问题清楚,我构建了一个类似于我的函数的简单示例。
my_func <- function(x,y){
out1 <- list(x*y+2,x+y^2)
out2 <- list(x^2+y-2,y-x^2)
out <- list(out1,out2)
return(out)
}
然后我明白了:
> x <- my_func(x=c(2,3,4),y=c(5,4,7))
> x
[[1]]
[[1]][[1]]
[1] 12 14 30
[[1]][[2]]
[1] 27 19 53
[[2]]
[[2]][[1]]
[1] 7 11 21
[[2]][[2]]
[1] 1 -5 -9
我需要将我的功能应用于100种不同的数据。然后,我将从两个列表中获得100输出。我如何使用lapply
函数来获取特定元素。
尝试了这个:
> x <- lapply(x,'[[','2')
> x
[[1]]
NULL
[[2]]
NULL
但是,在我的原始函数中,我使用以下代码来访问该元素。
> x[[1]][[1]]$par ##to get the first par (of list 1) of the first output list.
[,1] [,2] [,3] [,4] [,5]
[1,] 0.000000 0.000000 0.000000 0.000000 0
[2,] 2.545870 0.000000 0.000000 0.000000 0
[3,] 3.060626 2.879527 0.000000 0.000000 0
[4,] 2.015691 2.889324 2.967189 0.000000 0
[5,] 2.862635 2.511020 2.480592 1.781923 0
如何使用lapply
函数访问第一个和第二个列表中的所有$par
?有什么帮助吗?
答案 0 :(得分:1)
如果使用的索引是numeric
,我们不需要引号。引号使list
检查与该字符匹配的names
。所以,
lapply(x, `[[`, 2)
#[[1]]
#[1] 27 19 53
#[[2]]
#[1] 1 -5 -9
如果我们已经命名了子列表,那么OP的方法将起作用
x1 <- lapply(x, setNames, 1:2)
lapply(x1, `[[`, '2')
#[[1]]
#[1] 27 19 53
#[[2]]
#[1] 1 -5 -9