通过replicate()运行多次的函数返回多个东西

时间:2010-12-07 00:06:43

标签: r

在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

如果你有更好的方法可以通过一个函数返回多个东西,这可能是复制的,请不要犹豫回复。

谢谢和问候!

2 个答案:

答案 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]

为你工作?