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。
欢迎任何建议或意见。提前谢谢。
答案 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
#}
}