【问题标题】:Loop to create series of graphs from different files循环以从不同文件创建一系列图形
【发布时间】:2011-05-25 12:37:23
【问题描述】:

我正在尝试从一系列文件中绘制每月每一天的长期(几年)平均降水量 (pp) 直方图。每个文件都有从不同地方收集的数据(并且有不同的代码)。我的每个文件如下所示:

 X code year month day  pp  
 1 2867 1945     1   1 0.0  
 2 2867 1945     1   2 0.0   
... 

我正在使用以下代码:

files <- list.files(pattern=".csv")  
par(mfrow=c(4,6))  
for (i in 1:24) {  
    obs <- read.table(files[i],sep=",", header=TRUE)  
    media.dia <- ddply(obs, .(day), summarise, daily.mean<-mean(pp))  
    codigo <- unique(obs$code)  
    hist(daily.mean, main=c("hist per day of month", codigo))  
}

我得到 24 个直方图,标题中有 24 个不同的代码,但不是来自 24 个不同位置的 24 个不同的直方图,而是 24 次相同的直方图(有 24 个不同的标题)。谁能告诉我为什么?谢谢!

【问题讨论】:

  • 你在哪里定义daily.mean? (是的,我可以看到这是 media.dia 中列的名称,但您没有将 media.dia 传递给 hist。)
  • 我怪罪于正态分布。该死的直方图看起来总是和 n ---> 无穷大一样。
  • @brandon-lol 我的 n 没那么大,它们肯定是同一张图
  • 只是一点统计数据幽默:)
  • @Andrie - daily.mean 是每天从“media.dia”计算的平均 pp。这还不足以定义它吗?如果我这样做head(daily.mean) 我会得到[1] 0.9579545 1.0464646 1.2237374 0.9840909 1.0205808 0.8277778

标签: r loops plot histogram


【解决方案1】:

我可以在您的代码中看到至少两个错误。

  1. 您的ddply 语句中有错误。
  2. 您将错误的变量传递给 hist,因此根据之前的会话操作绘制了可能存在或不存在的内容。

ddply 语句中的问题是您正在执行无效分配(使用 &lt;- )。使用= 修复此问题:

media.dia<- ddply(obs, .(day),summarise, daily.mean = mean(pp))

然后编辑您的hist 声明:

hist(media.dia$daily.mean,main=c("hist per day of month",codigo))

我怀疑问题在于您没有将正确的参数传递给hist。您的代码实际上完全生成绘图的原因是,在会话的前一步中,您必须创建一个名为 daily.mean 的变量(正如 Brandon 在评论中指出的那样。)

【讨论】:

  • 有趣,也许他将daily.mean计算为工作区中的另一个对象,这就是为什么他没有收到错误消息?
  • @brandon。对,就是这样。我确定这就是正在发生的事情。
  • 谢谢,但它给出了一个错误:Error in hist.default(media.dia$daily.mean, main = c("hist per day of month", :'x' must be numeric
  • 好的,我在您的代码中发现了另一个错误。我会更新我的答案。
  • 你是对的,我关闭 r 并再次打开它,现在我得到一个错误。我认为问题出在media.dia&lt;- ddply(obs, .(day),summarise, daily.mean&lt;-mean(pp)) 上,因为它给出了一个包含天数的列和另一个包含 NA 的列
【解决方案2】:

我认为ddply函数中计算出来的daily.mean是在单独的环境中赋值的,在hist可以看到的环境中并不存在。

试试daily.mean&lt;&lt;-mean(pp)

【讨论】:

  • 使用&lt;&lt;- 分配给上游环境应该只在极少数情况下使用,这不是其中之一。 &lt;- 应该是 =
  • @Andrie 我同意,您的解决方案更合适。并没有真正想到为什么 OP 首先在 ddply 语句中进行分配。
  • 简单的错误,是我的猜测。我经常遇到这种情况,尤其是在编写data.frame 语句时。
猜你喜欢
  • 2020-10-14
  • 2021-12-09
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-23
相关资源
最近更新 更多