Gerar nomes de forma iterativa em R para armazenar lotes
Pergunta
Eu estou usando R percorrer um quadro de dados, executar um cálculo e para fazer um enredo.
for(i in 2 : 15){
# get data
dataframe[,i]
# do analysis
# make plot
a <- plot()
}
Existe uma maneira que eu posso fazer o nome do objeto enredo 'a', usando o valor do 'i'? Por exemplo, a + "i" <- plot (). Então eu quero acrescentar que para um vetor, por isso tenho uma série de parcelas que eu possa, em seguida, usar numa fase posterior, quando eu quiser fazer um pdf. Ou talvez não há outra maneira de armazenar isso.
Eu estou familiarizado com a função colar (), mas eu ainda não descobri como definir um objeto de usá-lo.
Solução
Se você quer um "vector" de objetos de enredo, a maneira mais fácil é provavelmente para armazená-los em um list
. Use paste()
para criar um nome para o enredo e, em seguida, adicioná-lo à lista:
# 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()
}
Se você não deseja armazenar as parcelas em uma lista e, literalmente, queria criar um novo objeto que tinha o nome contido no pltName
, então você poderia usar 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 )
Outras dicas
Tenha um olhar para o lattice
pacotes ou ggplot2
, as funções de enredo nesses pacotes criar objetos que podem ser atribuídos a variáveis ??e podem ser impressos ou plotados em um estágio posterior.
Por exemplo, com lattice
:
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 anexar os objetos para uma lista:
p <- list()
p[[1]] <- xyplot(...)
p[[2]] <- xyplot(...)