Генерация имен итеративно в R для хранения графиков - PullRequest
4 голосов
/ 29 ноября 2009

Я использую R для обхода фрейма данных, выполнения вычислений и построения графика.

for(i in 2 : 15){
# get data
dataframe[,i]  

# do analysis

# make plot
a <- plot()
}

Есть ли способ, которым я могу сделать имя объекта графика 'a', используя значение 'i'? Например, + "i" <- plot (). Затем я хочу добавить это к вектору, чтобы у меня была серия графиков, которые я мог бы использовать на более позднем этапе, когда я хочу сделать PDF. Или, возможно, есть другой способ сохранить это. </p>

Я знаком с функцией paste (), но я не понял, как определить объект, используя его.

Ответы [ 2 ]

6 голосов
/ 29 ноября 2009

Если вам нужен «вектор» объектов графика, возможно, самый простой способ - сохранить их в list. Используйте paste(), чтобы создать имя для своего графика и затем добавить его в список:

# 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()

}

Если вы не хотите сохранять графики в списке и буквально хотите создать новый объект, имя которого содержится в pltName, тогда вы можете использовать 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 )
4 голосов
/ 29 ноября 2009

Посмотрите пакеты lattice или ggplot2, функции печати в этих пакетах создают объекты, которые могут быть назначены переменным и могут быть напечатаны или нанесены на график на более позднем этапе.

Например, с 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

Или добавить объекты в список:

p <- list()
p[[1]] <- xyplot(...)
p[[2]] <- xyplot(...)
...