运行功能时无输出

时间:2016-02-17 22:44:52

标签: r csv

R和编程的新手,我在这个Coursera任务中回顾了SO上所有可能的主题,但无法弄清问题是什么。我知道这个函数可以使用lapply进行优化等等,但我想知道为什么这个特殊函数不起作用。我觉得这个功能的一些问题略微激怒了一些用户。说实话,我查看了相关的帖子,我不知道我能对这个特定的bug做些什么。

    pollutantmean <- function (directory, pollutant, id) {
  #Create the data frame with the data from the 332 files

  files <- list.files(getwd())
  df <- data.frame()
  id <- 1:332

  for (i in 1:length(id)) {df <- rbind(df, read.csv(files[i]))

  if (pollutant=="nitrate"){ 

    #Create a subset for nitrate values of df
    df_nitrate <- df[df$ID==id[i], "nitrate"] 

    #Take mean of df_nitrate
    mean (df_nitrate, na.rm = TRUE)

    } else {
    #Create a subset for sulfate values of df
    df_sulfate <- df[df$ID==id[i],"sulfate"] 

   #Take mean of df_sulfate
     mean(df_sulfate, na.rm = TRUE)
     }
  }
} 

对于那些没有听说过这个赋值函数的人:我的工作目录中有332个csv文件(名为001.csv,002.csv等)。任务是将所有这些都放在一个数据框中,并能够调用文件列的平均值(由&#34; id&#34;对应于该文件的变量)或跨多个文件(一些可以找到函数和输出的示例here

我试图调用traceback或debug函数来定位问题,但无济于事:

pollutantmean(getwd(), "nitrate", 23)
> traceback()
No traceback available 
> debug(pollutantmean)
> 

操作系统是Windows 10。

欢迎任何建议或意见。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的for循环围绕着您的block。 R函数在循环中不会返回值(除非你使用return函数,这不是你想要做的)。

  pollutantmean <- function (directory, pollutant, id) {
  #Create the data frame with the data from the 332 files

  files <- list.files(getwd())
  df <- data.frame()
  id <- 1:332

  for (i in 1:length(id)) {df <- rbind(df, read.csv(files[i]))
  # close for loop HERE
  }

  if (pollutant=="nitrate"){ 

    #Create a subset for nitrate values of df
    df_nitrate <- df[df$ID==id[i], "nitrate"] 

    #Take mean of df_nitrate
    mean (df_nitrate, na.rm = TRUE)

    } else {
    #Create a subset for sulfate values of df
    df_sulfate <- df[df$ID==id[i],"sulfate"] 

   #Take mean of df_sulfate
     mean(df_sulfate, na.rm = TRUE)
     }
  # not HERE
  #}
}