【发布时间】:2022-01-25 12:12:40
【问题描述】:
查询:我为我的问题生成了工作代码,但我只是强行解决了问题,并想了解更多关于我在此过程中遇到的“错误”的信息。
我正在尝试做的事情: 编写一个函数,读取一个满是 csvs 的目录,并报告每个数据文件中完全观察到的案例数量,并将其呈现为 dataframe。
问题 1:随机 NA
#part 2
complete<-function(id=1:332){
#(1)read the files
file_names<-list.files(path = "specdata/",pattern = ".csv",full.names = TRUE)
a<-matrix(nrow=length(id),ncol=1)
colnames(a)<-"nobs"
#returning the data frame
for(i in id){
a<-rbind(a,sum(complete.cases(read.csv(file_names[i]))))
}
b<-cbind(id,a)
c<-as.data.frame(b)
c
}
#testing
complete(id=30:25)
查询:我用 na.omit 轻松解决了这个问题,但为什么会发生这种情况?
问题 2:从一开始就将 a 设置为数据框。 我尝试将 a 设置为数据框并生成解决方案,但我无法生成完整的数据框
#part 2
complete<-function(id=1:332){
#(1)read the files
file_names<-list.files(path = "specdata/",pattern = ".csv",full.names = TRUE)
df<-data.frame()
#returning the data frame
for (i in id){
complete_df<-rbind(df,sum(complete.cases(read.csv(file_names[i]))))
}
colnames(complete_df)<-"nobs"
complete_df
}
#testing
complete(id=4:6)
我尝试了什么: 我在网上能找到的最接近的答案是How to get print function output into a dataframe
但是,我无法理解整个函数试图解释什么,我试着向上看这个 sapply 函数但无法理解它。
我对问题 #2 的问题: (1)根据stackoverflow,nobs可能在每次迭代中都发生了变化,并且之前的值被删除了。为什么会发生这种情况,即使我使用 rbind 而不仅仅是打印? (2) 这个 sapply 到底是做什么的?它与 rbind 有什么不同?我已经尝试查找该功能,但我完全失去了它的含义。
【问题讨论】: