为什么这在R控制台中有效,但在函数中却无效

时间:2015-11-12 01:59:35

标签: r

当我将此代码直接输入R控制台时,它可以完美地工作。

for(i in files) df<-rbind(df,read.csv(paste(directory,i,sep="/")))

如果我将上面的代码嵌套在下面的函数中,它会抛出一个

  

意外输入错误

pollutantmean <- function(directory, pollutant, id){ 
    files <- list.files(directory) 
    df <- data.frame() 
    newdf <- data.frame() 
    for(i in files){
        df <-rbind(df,read.csv(paste(directory,i,sep="/")))
    }
    for(j in id){
        newdf <- rbind(df[which(df$ID==j),])
    }
    return(mean(na.omit(newdf[,pollutant]))) 
}

2 个答案:

答案 0 :(得分:0)

stackoverflow上的另一篇文章表明它是由复制粘贴和换行符不匹配引起的

Error only when running whole block of code

但是,我想知道这是否是由错误的文件路径引起的。也许你传递的目录变量已经结束了“/”?

答案 1 :(得分:0)

如果你说得对,我认为你的功能还可以。这对我有用:

directory <- "~/Documents/temp/csv/"

pollutantmean <- function(directory, pollutant, id) {
  files <- list.files(directory) 
  df <- data.frame()
  newdf <- data.frame()
  for(i in files) {
    df <-rbind(df,read.csv(paste(directory,i,sep="/")))
  }
  for(j in id){
    newdf <- rbind(df[which(df$ID==j),])
  }
  return(mean(na.omit(newdf[,pollutant]))) 
}

pollutantmean(directory, 'val', c('x'))
[1] 2.5

对于看起来像这样的数据:

ID,val
x,1
y,2
z,3

和此:

ID,val
x,4
w,2