在R中,假设有一个函数返回向量列表,并且该函数多次使用replicate()运行。然后从复制中返回的是列表的2D矩阵。
我想知道如何形成一个向量,它由每个运行带有replicate()的函数返回的列表的某个特定向量中的某个特定组件组成?
例如,如何从函数myf()上的replicate()返回的所有列表中的最后一个向量中的所有最后组件创建向量?请注意,此示例中的所有此类组件恰好都具有值6。
> myf<-function(){list(c(1,2),c(3,4),c(5,6))}
> out=replicate(4, myf())
> out[3,][[]][2]
Error in out[3, ][[]] : invalid subscript type 'symbol'
> out[3,]
[[1]]
[1] 5 6
[[2]]
[1] 5 6
[[3]]
[1] 5 6
[[4]]
[1] 5 6
> out[3,][[1]][2]
[1] 6
> out[3,][[2]][2]
[1] 6
> out[3,][[4]][2]
[1] 6
> out[3,][[3]][2]
[1] 6
如果你有更好的方法可以通过一个函数返回多个东西,这可能是复制的,请不要犹豫回复。
谢谢和问候!
答案 0 :(得分:2)
我认为你需要分步完成。首先看看:
> out
[,1] [,2] [,3] [,4]
[1,] Numeric,2 Numeric,2 Numeric,2 Numeric,2
[2,] Numeric,2 Numeric,2 Numeric,2 Numeric,2
[3,] Numeric,2 Numeric,2 Numeric,2 Numeric,2
模式数字列表的矩阵,你显然只想处理那个矩阵的行,所以让我们看看每一行中的最后一个元素:
> str( apply(out, 2, tail, 1) )
List of 4
$ :List of 1
..$ : num [1:2] 5 6
$ :List of 1
..$ : num [1:2] 5 6
$ :List of 1
..$ : num [1:2] 5 6
$ :List of 1
..$ : num [1:2] 5 6
所以你有一份清单清单。让我们只列出一个向量列表:
> str( lapply( apply(out, 2, tail, 1), "[[", 1) )
List of 4
$ : num [1:2] 5 6
$ : num [1:2] 5 6
$ : num [1:2] 5 6
$ : num [1:2] 5 6
获取每个元素的最后一个元素:
> sapply(lapply( apply(out, 2, tail, 1), "[[", 1), tail, 1)
[1] 6 6 6 6
答案 1 :(得分:1)
会是这样的:
不公开(下)[C(6,12,18,24)]
OR
as.data.frame(OUT [3])[2,1]
为你工作?