2010-12-07 10 views
0

Rでは、ベクトルのリストを返す関数があり、関数は何度もreplicate()で実行されるとします。次に、複製からの復帰はリストの2Dマトリックスです。replicate()によって何度も実行される関数による複数の戻り値

私は、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

はhttp://stackoverflow.com/questions/4022337/how-to-pickに非常に似て聞こえます最後の、あるいは何でも、全てのアイテムの中のベクトル、おそらく 'サプリー(x、tail、n = 1)'が助けになるかもしれません。 – caracal

答えて

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

う何かのように:

非公開に(アウト)[C(6,12,18,24)]

OR

as.data.frame([3]アウト)[ 2]

あなたのために働いていますか?

関連する問題