我刚刚编写了我的“完成”功能(R编程-Coursera),但是某些功能无法正常工作。
complete <- function(directory,id=1:332){
#create a list of files
list_files<-list.files(directory,full.names = TRUE)
#create an empty data frame
dat <- data.frame()
for(i in id){
#read in the file
temp<- read.csv(list_files[i],header=TRUE)
#delete rows that do not have complete cases
temp<-na.omit(temp)
#count all of the rows with complete cases
tNobs<-nrow(temp)
#enumerate the complete cases by index
dat<-rbind(dat,data.frame(i,tNobs))
}
return(dat)
}
当我问:
cc <- complete("specdata", c(6, 10, 20, 34, 100, 200, 310))
print(cc$nobs)
它返回NULL。为什么?它应该返回: 228148124165104460232
答案 0 :(得分:1)
问题是data.frame
是通过不分配列名来创建的。因此,它将对象名称作为列名称,即第二列的tNobs
。
i <- 2
tNobs = 10
data.frame(i, tOobs)
# i tOobs
#1 2 10
因此,当我们调用data.frame中不存在的nobs
时,它将得到NULL
dat <- rbind(dat, data.frame(col1 = i, nobs = tNobs))