rePost:在R中迭代生成名称以存储图(2009)

时间:2011-02-19 22:24:04

标签: r object loops plot

上一篇文章提供了一种在R中迭代存储图的解决方案:见... iteratively in R... 。我遇到了类似的问题,在阅读并实施了帖子提供的解决方案后,我仍无法解决问题。

上一篇文章提供了以下代码:

  

#创建一个列表来保存绘图对象。

     

pltList <- list()

     

for( i in 2:15 ){

     

#获取数据,执行分析等等。

     

#创建剧情名称     pltName <- paste( 'a', i, sep = '' )

     

#使用以下内容在列表中存储绘图   名称作为索引    pltList[[ pltName ]] <- plot()

     

}

以下是我的代码实现:

a <- list.files("F:.../4hrs", pattern='.csv')
pltList <- list()
i=1

for (x in a) {
    myfiles <- read.csv(a, header=TRUE, as.is=TRUE, nrows=2500)

    h <- hist(data, plot=F)
    # perform analysis, ect.

    pltName <- paste('a', formatC(i, width=2, flag='0'), sep='')
    pltList[[ pltName ]] <- plot(h)
    i <- i+1

  }

pltName会生成一个名称列表,但pltList的长度为零。

我不确定为什么pltList没有分配图 我最终想要做的是创建一个包含多个图的pltList。然后以par(mfrow=c(2,1))样式绘制这些图并导出为.pdf。

我应该提一下上面适用于

pltList[[ pltName ]] <- xyplot(h)

但是我无法以par(mfrow=c(2,1))的风格绘制多个情节。

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

在您引用的原始问题和我对它的回答中,plot()被用作绘图函数的抽象占位符,该函数返回一个对象,而不是对R函数plot的文字调用。返回图形对象的大多数函数都基于'网格'包,例如来自网格包的xyplot或来自ggplot2的qplot

对于这种困惑感到抱歉,我应该在答案中明确指出这一点,但我并没有因为问题的提问者已经意识到这一点。

基本图形函数(如histplot直接渲染到输出,并且不会返回任何可用于在以后重新创建绘图的对象,这就是为什么你最终会得到一个长度为零的清单。

为了使用这种方法,您必须交换hist函数的用法,以返回返回对象的内容。使用ggplot2,您可以在循环中执行以下操作:

# Don't call your data variable 'data' or ggplot will confuse it with the
# `data` function and suffer an error.
h <- qplot(x = plot_data)

pltName <- paste('a', formatC(i, width=2, flag='0'), sep='')
pltList[[ pltName ]] <- h

我已经编辑了我对上一个问题的回答,以清楚地表明在我的示例中使用plot()并不是对同名R函数的实际调用。

答案 1 :(得分:0)

你的代码使用我没有的文件,所以我无法复制它,我也不完全确定你要完成什么,但我确实在代码中看到了一些可能有助于修复它的问题:

a <- list.files("F:.../4hrs", pattern='.csv')

我不熟悉list.files,这是否正确分配a.csv似乎是个奇怪的模式。

pltList <- list()
i=1

for (x in a) {


 myfiles <- read.csv(a, header=TRUE, as.is=TRUE, nrows=2500)

我认为a是一个包含文件的向量吗?您为x的每个值循环a,但我没有看到x返回代码中的任何位置。你也在这里阅读文件名向量。不应该是read.csv(x,...,或者更好,循环for (i in 1:length(a))和索引a[i]

    h <- hist(data, plot=F)

我在任何地方都看不到对象datah是否已正确分配?

# perform analysis, ect.

    pltName <- paste('a', formatC(i, width=2, flag='0'), sep='')
    pltList[[ pltName ]] <- plot(h)
    i <- i+1
  }

我喜欢做的只是手动运行这样的循环,看看发生了什么。我认为分配myfilesh

时出现问题