此事已经持续了好几个小时。我在线上的第一个问题R.尝试创建一个包含循环的函数。该函数采用用户在污染物(4:6)中提交的向量,然后加载一堆csv文件(在提到的目录中)并绑定它们。奇怪(对我来说)是如果我分配变量id然后在不使用函数的情况下运行循环,它就可以工作!当我把它放在一个函数中,以便用户可以提供id向量时,它什么都不做。有人可以帮忙吗?谢谢!!!
pollutantmean<-function(id=1:332)
{
#read files
allfiles<-data.frame()
id<-str_pad(id,3,pad = "0")
direct<-"/Users/ped/Documents/LearningR/"
for (i in id) {
path<-paste(direct,"/",i,".csv",sep="")
file<-read.csv(path)
allfiles<-rbind(allfiles,file)
}
}
答案 0 :(得分:0)
您的函数缺少返回值。 (@Roland)
pollutantmean<-function(id=1:332) {
#read files
allfiles<-data.frame()
id<-str_pad(id,3,pad = "0")
direct<-"/Users/ped/Documents/LearningR/"
for (i in id) {
path<-paste(direct,"/",i,".csv",sep="")
file<-read.csv(path)
allfiles<-rbind(allfiles,file)
}
return(allfiles)
}
编辑: 你的错误是你没有在你的函数中指定你想从函数中得到什么。在R中,您在函数内部创建对象(您可以将其想象为不同的环境),然后指定要返回的对象。
关于接受我的回答的评论,我的意思是this :( ...要将答案标记为已接受,请点击答案旁边的复选标记,将其从灰色显示切换为填写... )。
答案 1 :(得分:0)
即使是lapply
和do.call
,也不需要return
作为最后一行功能:
pollutantmean <- function(id=1:332) {
id <- str_pad(id,3,pad = "0")
direct_files <- paste0("/Users/ped/Documents/LearningR/", id, ".csv")
# READ FILES INTO LIST AND ROW BIND
allfiles <- do.call(rbind, lapply(direct_files, read.csv))
}
答案 2 :(得分:0)
pollutantmean<-function(directory,pollutant,id)
{
#read files
allfiles<-data.frame()
id2<-str_pad(id,3,pad = "0")
direct<-paste("/Users/pedroalbuquerque/Documents/Learning R/",directory,sep="")
for (i in id2) {
path<-paste(direct,"/",i,".csv",sep="")
file<-read.csv(path)
allfiles<-rbind(allfiles,file)
}
#averaging polutants
mean(allfiles[,pollutant],na.rm = TRUE)
}
pollutantmean("specdata","nitrate",23:35)