在R中迭代生成名称以存储图

时间:2009-11-29 19:16:57

标签: r object loops plot

我正在使用R循环数据框,执行计算并绘制图。

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

# do analysis

# make plot
a <- plot()
}

有没有办法可以使用'i'的值将绘图对象名称设为'a'?例如,a +“i”&lt; - plot()。然后我想将它添加到矢量中,所以我有一系列的图表,然后我可以在稍后阶段使用,当我想制作pdf时。或许还有另一种存储方式。

我熟悉paste()函数,但我还没弄清楚如何使用它来定义对象。

2 个答案:

答案 0 :(得分:6)

如果你想要一个绘图对象的“矢量”,最简单的方法就是将它们存储在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 )

答案 1 :(得分:4)

查看包latticeggplot2,这些包中的绘图函数创建可以分配给变量的对象,可以在以后打印或绘制。

例如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(...)