2

R メモリに構造体があり、行列pの列にアクセスしようとしています。Rate

コンソールに入力p$6597858$Sampleすると...

 p$`6597858`$Sample
        Rate             Available                 X                    Y
[1,]    1.01              1520.93                0.00                  0.0
[2,]    1.02               269.13                0.00                  0.0
[3,]    1.03               153.19                0.00                  0.0
[4,]    1.04               408.80                0.00                  0.0

等々 ...

私がしようとすると、私のコード内で

get("p$`6597858`$Sample[,1]") 

これは返してもらいます...

object 'p$`6597858`$Sample[ ,1]' not found

これはアポストロフィの問題ですか?

4

1 に答える 1

4

The$[[operator も内部では機能しませんget()(p[[1]]は R オブジェクトではないため、 object のコンポーネントですp)。

あなたは試すことができます

p <- list(`6597858`=list(Sample=data.frame(Rate=1:3,Available=2:4)))
z <- eval(parse(text="p$`6597858`$Sample[,1]"))

しかし、それはおそらく悪い考えです。その理由はありますか

z <- p[["6597858"]][["Sample"]][,"Rate"]

あなたが望むことをしませんか?

character変数を使用してインデックスを作成することで、これを動的に行うことができますget

needed <- 1234
x <- p[[as.character(needed)]][["Sample"]][,"Rate"]

編集:コメントでハドリー・ウィッカムが提案)または

x <- p[[c(as.character(needed),"Sample","Rate")]]

( 2 番目に低いレベルの要素がデータ フレームまたはリストの場合: マトリックスの場合、この代替手段は機能しません。p[[c(as.character(needed),"Sample")]][,"Rate"]代わりに必要になります)

これは、その言語のイディオムを理解し、それを使って (苦労するのではなく) うまくいく状況です ...

library(fortunes)
fortune(106)

If the answer is parse() you should usually rethink the question.
   -- Thomas Lumley
      R-help (February 2005)

一般に、

  • リストから要素を直接抽出する方が、get()
  • リスト要素に標準外の名前を使用すること (つまり、バッククォートで保護する必要がある純粋な数字など) を使用することは賢明ではありません
  • [[よりも堅牢です$
于 2012-10-12T13:15:41.277 に答える