我已生成以下代码,并希望将for循环计算的五个值放入单个向量中。我花了几个小时搜索各个网站,但没有找到任何可以让我这样做的东西。
> complete<-function(directory,ID){
+ files_list <- list.files( directory , full.names=TRUE) #creates a list of files
+ dat <- data.frame() #creates an empty data frame
+ for (i in 1:332) { #loops through the files, rbinding them together
+ dat <- rbind(dat, read.csv(files_list[i]))
+ }
+ cleandat<-na.omit(dat)
+ for(i in ID){
+ n<-nrow(cleandat[cleandat$ID %in% i,])
+ print(n)
+ }
+
+ #return(ndat)
+ }
> complete("specdata", ID<-c(2,4,8,10,12))
[1] 1041
[1] 474
[1] 192
[1] 148
[1] 96
提前致谢
答案 0 :(得分:2)
不是使用print
,而是将最终结果和return
complete<-function(directory,ID){
result<- rep(NA,length(ID))
files_list <- list.files( directory , full.names=TRUE) #creates a list of files
dat <- data.frame() #creates an empty data frame
for (i in 1:332) { #loops through the files, rbinding them together
dat <- rbind(dat, read.csv(files_list[i]))
}
cleandat<-na.omit(dat)
for(i in ID){
n<-nrow(cleandat[cleandat$ID %in% i,])
result[i]<-n
}
return(result)
}
答案 1 :(得分:1)
这比for-loop更快更容易(尽管我担心你扔掉了包含所有数据的dat对象):
result <- table(dat$ID)[ID]
没有必要使用return
的建议。最后一次评估的结果将自动从函数返回。如果你想将它作为副作用打印出来,那么print
函数(与cat
函数不同)也会返回它的参数,因此可以自由地在赋值周围包裹print(. <- .)
。 / p>