尽管阅读了有关此错误的现有答案,但我仍然不知道如何解决此问题。
我必须在文件列表中获得完整案例的总和。每个文件(例如file1对应一个id(例如file1的id1)。我的目标是获得一个数据框,其中包含每个id的完整个案的数量(因此对于每个文件,因为file1包含id1的污染物,而file2包含id2的污染物等)
当我运行该功能时:complete("pollu", 1:10)
- >一切都很完美
complete("pollu", 34)
我得到ID 34次,33次返回NA并最终返回完整病例数。
complete(".", c(2, 4, 8, 10, 12))
我收到错误:
data.frame(id,nobs)中的错误:参数意味着数量不同 行:5,12
理解错误并修复它的任何帮助都将不胜感激。
complete <- function(directory,id=1:332) {
nobs <- vector()
files <- list.files(directory)
for (i in id) {
ID <- id
file <- read.csv(files[i])
nobs[i] <- sum(complete.cases(file),na.rm = TRUE)
}
df <- data.frame(ID,nobs)
colnames(df) <- c("ID", "nobs")
return (df)
}
答案 0 :(得分:3)
问题在于for循环以及您如何为nobs[i]
complete("pollu", 34)
循环仅使用i <- 34
运行一次。但是您将结果分配给nobs[i]
,实际上是nobs[34]
。这将为您提供一个分配了第34个值的向量,默认情况下保留其他NA
。
complete(".", c(2, 4, 8, 10, 12))
循环遍历 5 值。最大的一个是 12 。在最后一次迭代中,您为nobs[12]
分配了一个值,因此nobs
向量的长度为12,而i
的长度仅为5。
修复
for (i in seq_along(id))) {
ID <- id[i]
file <- read.csv(files[ID])
nobs[i] <- sum(complete.cases(file),na.rm = TRUE)
}
我将取值1,2,3 ..直到你需要的id数。
修改
由于id
已包含您需要的标签,您可以使用
df <- data.frame(id, nobs)