une liste multidimensionnelle? Liste de listes? tableau de listes?

(j'utilise définitivement une mauvaise terminologie dans cette question, désolé pour ça - Je ne sais pas comment décrire cela en termes de R...)

je veux créer une structure d'objets hétéroclites. Les dimensions ne sont pas nécessairement rectangulaires. Ce dont j'ai besoin serait probablement appelé juste "tableau d'objets" dans d'autres langues comme C. Par "objet" je veux dire une structure composée de différents membres, i.e. juste une liste en R - par exemple:

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

et maintenant, je voudrait faire 100 tels objets, et d'être en mesure de s'adresser à leurs membres par quelque chose comme

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

ou

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

je serais reconnaissant pour tout indice sur l'endroit où cette chose est décrite.

Merci d'avance!

7
demandé sur smci 2013-02-24 03:09:34

4 réponses

Je ne savais pas que vous cherchiez à créer d'autres objets de même structure. Vous êtes à la recherche pour 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"
4
répondu Arun 2013-02-24 09:21:13

cherchez-vous le nom de cette bête mythique ou comment le faire? :) j'ai peut-être tort, mais je pense que vous auriez tout aussi bien l'appeler une liste de listes.. par exemple:

# 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 ]]
12
répondu Anthony Damico 2013-02-23 23:16:33

voici l'exemple de la solution que j'ai pour le moment, il sera peut-être utile pour quelqu'un:

    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]])  
1
répondu Vasily A 2013-02-24 00:46:12

si les dimensions seront toujours rectangulaires (dans votre cas, 100x50), et que le contenu sera toujours homogène (dans votre cas, numérique) alors créez un 2D array/matrice.

si vous voulez la possibilité d'Ajouter / Supprimer / insérer sur des listes individuelles (ou changer le type de données), puis utiliser un liste de listes.

1
répondu smci 2017-03-27 22:37:19