4

次のようなもののリストを返すrのoptim関数があります:

[[354]]
    r     k sigma 
389.4 354.0 354.0 

しかし、list $ sigmaと言ってアクセスしようとすると、NULLを返すことはありません。

私はアタッチを試み、名前を試し、それをマトリックスに割り当てようとしましたが、これらのどれもうまくいきません.リスト??

どうもありがとう!!

str は私にこの出力を与えます:

List of 354
 $ : Named num [1:3] -55.25 2.99 119.37
  ..- attr(*, "names")= chr [1:3] "r" "k" "sigma"
 $ : Named num [1:3] -53.91 4.21 119.71
  ..- attr(*, "names")= chr [1:3] "r" "k" "sigma"
 $ : Named num [1:3] -41.7 14.6 119.2

だから私はリスト内のリスト内にダブルを持っています(?) リストを循環して、最初から関数を書かずに条件に合うものを選ぶ方法については、まだ当惑しています

4

3 に答える 3

10

重要な問題は、リストのリスト(または実際にはリストでもある data.frames のリスト) があることです。
これを確認するには、 をご覧くださいis(list[[354]])

解決策は、インデックス作成のレベルを追加することです。以下に、これを達成する方法の複数の選択肢があります。


へのインデックスとしてベクトルを使用できる[[ため、たとえば、354 番目の要素から 3 番目の要素にアクセスする場合は、次のように使用できます。

 myList[[ c(354, 3) ]]

文字インデックスも使用できますが、ネストされたすべてのレベルには名前付きインデックスが必要です。

names(myList) <- as.character(1:length(myList))
myList[[ c("5", "sigma") ]]

list最後に、data、などの名前を使用しないようにしてくださいdf。これにより、コードのクラッシュやエラーが発生し、関数をサブセット化しようとしたことに気付くまで、説明がつかず不可思議に見えます。


編集:

上記のコメントでの質問への回答: オブジェクトの構造 (つまり、オブジェクトの「構成」) を見たい場合は、次を使用します。str

> str(myList)
List of 5
 $ :'data.frame': 1 obs. of  3 variables:
  ..$ a    : num 0.654
  ..$ b    : num -0.0823
  ..$ sigma: num -31
 $ :'data.frame': 1 obs. of  3 variables:
  ..$ a    : num -0.656
  ..$ b    : num -0.167
  ..$ sigma: num -49
 $ :'data.frame': 1 obs. of  3 variables:
  ..$ a    : num 0.154
  ..$ b    : num 0.522
  ..$ sigma: num -89
 $ :'data.frame': 1 obs. of  3 variables:
  ..$ a    : num 0.676
  ..$ b    : num 0.595
  ..$ sigma: num 145
 $ :'data.frame': 1 obs. of  3 variables:
  ..$ a    : num -0.75
  ..$ b    : num 0.772
  ..$ sigma: num 6
于 2013-03-03T20:20:16.863 に答える
1

たとえば、すべてのシグマが必要な場合は、sapply を使用できます。

sapply(list, function(x)x["sigma"])

それを使用して、最小値と最大値を見つけることができます。

range(sapply(list, function(x)x["sigma"]))
于 2013-03-03T20:21:52.720 に答える
0

を使用すると、次のdo.callことができます。

 do.call('[',mylist,354)['sigma']
于 2013-03-03T20:36:03.850 に答える