循环列出带有 NA 的文件名
Loop to list names of files with NAs
我有一个名为“Holder”的文件夹,里面有一个文件列表。我正在尝试编写一个循环来遍历文件列表,并将包含 NA 的文件名添加到向量(称为“FileList”)中。当我在一个我知道有 NA 的文件上检查我的语句“sum(is.na(Orig))>=1”时,它 returns“TRUE”。但是,当我获取脚本时,我的向量 returns “logical(0)”。我在这里错过了什么?
setwd("/Users/.../Desktop/NAs")
fileNames <- Sys.glob("*.csv")
fileNumbers <- seq(fileNames)
FileList<-vector()
for (fileNumber in fileNumbers) {
Orig <- read.csv(fileNames[fileNumber],
header = TRUE,
sep = ",")
if (sum(is.na(Orig))>=1) {
append(fileNames[fileNumber], FileList)
}}
也尝试了下面的方法,结果相同:
if (sum(is.na(Orig$D_postIAT))>=1) {
append(fileNames[fileNumber], FileList)
} else if (sum(is.na(Orig$D_preIAT))>=1) {
append(fileNames[fileNumber], FileList)
}
这里有一些问题。
- 你想要
seq_along()
,而不是 seq()
。 seq()
需要数字参数。
fileNumbers <- seq_along(fileNames)
vector()
默认创建一个逻辑向量,但你想要一个字符向量。
FileList<-vector(mode = “character”)
您需要分配每个append()
的结果。除了极少数例外(R6 类 之外),R 中的对象不会就地修改。
您的论点是倒退的:append()
将对象作为
附加到,然后是要附加的对象。
最后,你可以简化
您的代码使用 any()
而不是 sum() >= 1
,并结合
两个 if
子句用 or 合二为一。所以尝试:
if (any(is.na(Orig$D_postIAT)) || any(is.na(Orig$D_preIAT))) {
FileList <- append(FileList , fileNames[fileNumber])
}
我有一个名为“Holder”的文件夹,里面有一个文件列表。我正在尝试编写一个循环来遍历文件列表,并将包含 NA 的文件名添加到向量(称为“FileList”)中。当我在一个我知道有 NA 的文件上检查我的语句“sum(is.na(Orig))>=1”时,它 returns“TRUE”。但是,当我获取脚本时,我的向量 returns “logical(0)”。我在这里错过了什么?
setwd("/Users/.../Desktop/NAs")
fileNames <- Sys.glob("*.csv")
fileNumbers <- seq(fileNames)
FileList<-vector()
for (fileNumber in fileNumbers) {
Orig <- read.csv(fileNames[fileNumber],
header = TRUE,
sep = ",")
if (sum(is.na(Orig))>=1) {
append(fileNames[fileNumber], FileList)
}}
也尝试了下面的方法,结果相同:
if (sum(is.na(Orig$D_postIAT))>=1) {
append(fileNames[fileNumber], FileList)
} else if (sum(is.na(Orig$D_preIAT))>=1) {
append(fileNames[fileNumber], FileList)
}
这里有一些问题。
- 你想要
seq_along()
,而不是seq()
。seq()
需要数字参数。
fileNumbers <- seq_along(fileNames)
vector()
默认创建一个逻辑向量,但你想要一个字符向量。
FileList<-vector(mode = “character”)
您需要分配每个
append()
的结果。除了极少数例外(R6 类 之外),R 中的对象不会就地修改。您的论点是倒退的:
append()
将对象作为 附加到,然后是要附加的对象。最后,你可以简化 您的代码使用
any()
而不是sum() >= 1
,并结合 两个if
子句用 or 合二为一。所以尝试:
if (any(is.na(Orig$D_postIAT)) || any(is.na(Orig$D_preIAT))) {
FileList <- append(FileList , fileNames[fileNumber])
}