我有一個名為“Holder”的檔案夾,其中包含檔案串列。我正在嘗試撰寫一個回圈來遍歷檔案串列,并將包含 NA 的檔案的名稱添加到向量(稱為“FileList”)中。當我在我知道有 NA 的檔案上檢查我的陳述句“sum(is.na(Orig))>=1”時,它回傳“TRUE”。但是,當我獲取腳本時,我的向量回傳“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)
}
uj5u.com熱心網友回復:
這里有幾個問題。
- 你想要
seq_along(),沒有seq()。seq()需要數字引數。
fileNumbers <- seq_along(fileNames)
vector()默認創建一個邏輯向量,但你想要一個字符向量。
FileList<-vector(mode = “character”)
您需要分配每個
append(). 除了極少數例外(R6 類之外),R 中的物件不會就地修改。您的論點是倒退的:
append()獲取要附加的物件,然后是要附加的物件。any()最后,您可以通過使用而不是來簡化您的代碼sum() >= 1,并通過將兩個if子句與一個或組合成一個子句。所以試試:
if (any(is.na(Orig$D_postIAT)) || any(is.na(Orig$D_preIAT))) {
FileList <- append(FileList , fileNames[fileNumber])
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/424466.html
下一篇:使用文本檔案中的每個串列執行命令
