在R中确定完整案例的函数

在R中确定完整案例的函数,r,function,nested-loops,R,Function,Nested Loops,我有以下代码来打印完整的案例: complete <- function(directory, id=1:332) { data<-NULL dat <- NULL s <- NULL for (i in 1:length(id)) { data[[i]]<- c(paste(directory, "/",formatC(id[i], width=3, flag=0),".csv",sep="")) df[[i]]<-c(read.csv(data

我有以下代码来打印完整的案例:

complete <- function(directory, id=1:332) {
data<-NULL
dat <- NULL
s <- NULL
   for (i in 1:length(id)) {
data[[i]]<- c(paste(directory, "/",formatC(id[i], width=3, flag=0),".csv",sep=""))   
df[[i]]<-c(read.csv(data[[i]])) 
s[i] <- sum(complete.cases(df[[i]]))
dat <- data.frame(cbind(id,nobs=s[i]))    
   } 
dat
}
所需的输出如下所示:

complete("specdata", c(2, 4, 8, 10, 12))
##   id nobs
## 1  2 1041
## 2  4  474
## 3  8  192
## 4 10  148
## 5 12   96
head(file)
        Date sulfate nitrate ID
1 2003-01-01      NA      NA  1
2 2003-01-02      NA      NA  1
3 2003-01-03      NA      NA  1
4 2003-01-04      NA      NA  1
5 2003-01-05      NA      NA  1
6 2003-01-06      NA      NA  1
.csv文件如下所示:

complete("specdata", c(2, 4, 8, 10, 12))
##   id nobs
## 1  2 1041
## 2  4  474
## 3  8  192
## 4 10  148
## 5 12   96
head(file)
        Date sulfate nitrate ID
1 2003-01-01      NA      NA  1
2 2003-01-02      NA      NA  1
3 2003-01-03      NA      NA  1
4 2003-01-04      NA      NA  1
5 2003-01-05      NA      NA  1
6 2003-01-06      NA      NA  1

从2个输出中可以明显看出,所有id的nobs值都是对应于id==12的复制值。我想不出输出与id对应的nob的方法。让我们忽略所需输出的每一行中的#。提前感谢。

我试图清理您的代码:

complete <- function(directory, id) {
  s <- vector()
  for (i in 1:length(id)) {
      path <- c(paste(directory, "/",formatC(id[i], width=3, flag=0),".csv",sep=""))   
      data <- c(read.csv(path)) 
      s[i] <- sum(complete.cases(data))
  } 
  dat <- data.frame(cbind(id,nobs=s))   
  return(dat)
 }
把第三个变成了一个空向量。其次,您可以看到我删除了
dat
data
对象的索引,并为它们提供了一个更具表现力的名称。由于这两个对象是在循环的每次迭代中新创建的,所以给它们一个索引是没有意义的。最后,您错放了结束括号(如上所述),仅从
s
的一个元素(即最后一个元素)创建了
dat$nobs


dat您的.csv文件的实例是什么样子的?对不起,我忘了提这个。看起来是这样的:您显然错误地放置了for循环的结束括号。就像现在一样,它在每次迭代中都会覆盖
dat
,使整个函数基本上毫无意义。如果你把它放在
dat之前,我这样做了,但结果还是一样。你现在找到解决方案了吗?这很有效!但仍然需要了解我的代码中的错误在哪里。谢谢。那真的很有帮助。谢谢。
dat <- data.frame(cbind(id,nobs=s[i])) 
dat <- data.frame(cbind(id,nobs=s))