Génération itérative de noms en R pour le stockage de parcelles
Question
J'utilise R pour parcourir une trame de données, effectuer un calcul et créer un tracé.
for(i in 2 : 15){
# get data
dataframe[,i]
# do analysis
# make plot
a <- plot()
}
Existe-t-il un moyen de rendre le nom d'objet de tracé "a" en utilisant la valeur de "i"? Par exemple, un + & Quot; i & Quot; < - plot (). Ensuite, je souhaite ajouter cela à un vecteur afin de disposer d’une série de tracés que je pourrai utiliser ultérieurement, lorsque je souhaite créer un fichier PDF. Ou peut-être y a-t-il un autre moyen de stocker cela.
Je connais bien la fonction paste () mais je n'ai pas compris comment définir un objet à l'aide de celle-ci.
La solution
Si vous voulez un " vecteur " des objets de tracé, le moyen le plus simple est probablement de les stocker dans un list
. Utilisez paste()
pour créer un nom pour votre tracé, puis ajoutez-le à la liste:
# Create a list to hold the plot objects.
pltList <- list()
for( i in 2:15 ){
# Get data, perform analysis, ect.
# Create plot name.
pltName <- paste( 'a', i, sep = '' )
# Store a plot in the list using the name as an index.
# Note that the plotting function used must return an *object*.
# Functions from the `graphics` package, such as `plot`, do not return objects.
pltList[[ pltName ]] <- some_plotting_function()
}
Si vous ne souhaitez pas stocker les parcelles dans une liste et que vous souhaitez créer un nouvel objet dont le nom est contenu dans pltName
, vous pouvez utiliser assign()
:
# Use assign to create a new object in the Global Environment
# that gets it's name from the value of pltName and it's contents
# from the results of plot()
assign( pltName, plot(), envir = .GlobalEnv )
Autres conseils
Examinez les packages lattice
ou ggplot2
, les fonctions de tracé de ces packages créent des objets pouvant être affectés à des variables et imprimés ou représentés ultérieurement.
Par exemple avec <=>:
library("lattice")
i <- 1
assign(sprintf("a%d", i), xyplot(1:10 ~ 1:10))
print(a1) # you have to "print" or "plot" the objects explicitly
Ou ajoutez les objets à une liste:
p <- list()
p[[1]] <- xyplot(...)
p[[2]] <- xyplot(...)