8

(この質問では間違いなく間違った用語を使用しています。申し訳ありません-これをR用語で説明する正しい方法がわかりません...)

異種オブジェクトの構造を作成したい。寸法は長方形である必要はありません。私が必要とするものは、おそらく C のような他の言語では単に「オブジェクトの配列」と呼ばれるでしょう。「オブジェクト」とは、さまざまなメンバーで構成される構造、つまり R の単なるリストを意味します。たとえば、次のようになります。

myObject <- list(title="Uninitialized title", xValues=rep(NA,50), yValues=rep(NA,50)) 

そして今、私はそのようなオブジェクトを100個作成し、次のような方法でそれらのメンバーに対処できるようにしたいと考えています

for (i in 1:100) {myObject[i]["xValues"]<-rnorm(50)}

また

for (i in 1:100) {myObject[i]$xValues<-rnorm(50)}

このことがどこに記述されているかについてのヒントをいただければ幸いです。

前もって感謝します!

4

4 に答える 4

13

この神話上の獣の名前を探していますか、それともその方法を探していますか? :)私は間違っているかもしれませんが、リストのリストと呼ぶだけだと思います..例:

# create one list object
x <- list( a = 1:3 , b = c( T , F ) , d = mtcars )

# create a second list object
y <- list( a = c( 'hi', 'hello' ) , b = c( T , F ) , d = matrix( 1:4 , 2 , 2 ) )

# store both in a third object
z <- list( x , y )

# access x
z[[ 1 ]] 

# access y
z[[ 2 ]]

# access x's 2nd object
z[[ 1 ]][[ 2 ]]
于 2013-02-23T23:16:33.627 に答える
6

同じ構造の他のオブジェクトを作成しようとしていることに気づきませんでした。を探していreplicateます。

my_fun <- function() {
    list(x=rnorm(1), y=rnorm(1), z="bla")
}
replicate(2, my_fun(), simplify=FALSE)

# [[1]]
# [[1]]$x
# [1] 0.3561663
# 
# [[1]]$y
# [1] 0.4795171
# 
# [[1]]$z
# [1] "bla"
# 
# 
# [[2]]
# [[2]]$x
# [1] 0.3385942
# 
# [[2]]$y
# [1] -2.465932
# 
# [[2]]$z
# [1] "bla"
于 2013-02-24T09:21:13.380 に答える
2

これが私が今のところ持っている解決策の例です、多分それは誰かに役立つでしょう:

    NUM <- 1000 # NUM is how many objects I want to have
    xVal <- vector(NUM, mode="list")
    yVal <- vector(NUM, mode="list")
    title   <- vector(NUM, mode="list")
    for (i in 1:NUM) {
     xVal[i]<-list(rnorm(50))
     yVal[i]<-list(rnorm(50))
     title[i]<-list(paste0("This is title for instance #", i))
    }
   myObject <- list(xValues=xVal, yValues=yVal, titles=title)
   # now I can address any member, as needed:
   print(myObject$titles[[3]])
   print(myObject$xValues[[4]])  
于 2013-02-24T00:46:12.930 に答える