2017-08-16 12 views
0

私は自分の機能を作りました(とても長く複雑です)。私の関数の出力は2つのリストのリストです。私の質問を明確にするために、私は自分の関数に似た簡単な例を作りました。私は100個の異なるデータへの私の関数を適用する必要がRのリストのリストの特定の要素を取得する方法は?

> 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 

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) 
} 

は、その後、私はこれを得ました。次に、私は2つのリストから100の出力を得るでしょう。どのように私はlapply関数を使用して特定の要素を取得することができます。私は要素にアクセスするには、次のコードを使用してい私の本来の機能では、

> x <- lapply(x,'[[','2') 
> x 
[[1]] 
NULL 

[[2]] 
NULL 

しかし:

Tはこれを試してみました。

> 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 

どのように私は、第1および第2のリストのすべての$parにアクセスするためにlapply機能を使用することができますか?助けてください?

+0

変更を ' '働くだろう。文字インデックスではなく数値インデックスでサブセット化しています。あなたが既に文字ベクトルで名前をつけていれば、それはうまくいくはずです。そうでなければ 'lapply(x、 '[['、2)' – akrun

答えて

1

インデックスがnumericの場合、引用符は必要ありません。見積もりでは、listはその文字に一致するnamesを確認します。我々は、サブリストの名前ていたのであれば、

lapply(x, `[[`, 2) 
#[[1]] 
#[1] 27 19 53 

#[[2]] 
#[1] 1 -5 -9 

は、その後、OPのアプローチは、 '2'に2'`

x1 <- lapply(x, setNames, 1:2) 
lapply(x1, `[[`, '2') 
#[[1]] 
#[1] 27 19 53 

#[[2]] 
#[1] 1 -5 -9 
+0

あなたの答えはありがとうございます。はい、私の出力に名前がついています。 –

+1

これは本当に私が 'lapply'とリストのために学ぶ新しいものです –

関連する問題