【问题标题】:Generating names iteratively in R for storing plots在 R 中迭代地生成名称以存储图
【发布时间】:2010-12-21 10:47:36
【问题描述】:

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

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

# do analysis

# make plot
a <- plot()
}

有没有一种方法可以使绘图对象名称为“a”,使用“i”的值?例如,a + "i"

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

【问题讨论】:

    标签: r object loops plot


    【解决方案1】:

    如果您想要绘图对象的“向量”,最简单的方法可能是将它们存储在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 )
    

    【讨论】:

    • 感谢两位的回答 - 他们非常有帮助。
    【解决方案2】:

    看看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(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2013-10-04
      • 2013-01-24
      • 1970-01-01
      相关资源
      最近更新 更多