如何将一系列循环计算放入向量中

时间:2014-11-11 17:24:14

标签: r

我已生成以下代码,并希望将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

提前致谢

2 个答案:

答案 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>