簡體   English   中英

文件錯誤(文件,“rt”):complete.cases 程序中的“描述”參數無效

[英]Error in file(file, "rt") : invalid 'description' argument in complete.cases program

我正在編寫一個 R function 讀取一個充滿文件的目錄並報告每個數據文件中完全觀察到的案例的數量。 function 返回一個數據框,其中第一列是文件名,第二列是完整案例的數量。

如,

id nobs
1  108
2  345
...
etc

這是我寫的 function:

complete <- function(directory, id = 1:332) {

  for(i in 1:332) {
    path<-paste(directory,"/",id,".csv",sep="")
    mydata<-read.csv(path)
    #nobs<-nrow(na.omit(mydata))
    nobs<-sum(complete.cases(mydata))
    i<-i+1
  }

  completedata<-c(id,nobs)
}

我執行 function:

complete("specdata",id=1:332)

但我收到此錯誤:

Error in file(file, "rt") : invalid 'description' argument

我還嘗試了traceback() function 來調試我的代碼,它給出了這個 output:

traceback()
# 4: file(file, "rt") at #6
# 3: read.table(file = file, header = header, sep = sep, quote = quote, 
#    dec = dec, fill = fill, comment.char = comment.char, ...) at #6
# 2: read.csv(path) at #6
# 1: complete("specdata", id = 1:332)

沒有一個完全可重現的例子很難說,但我懷疑你的問題是這一行:

path<-paste(directory,"/",id,".csv",sep="")

這里的id是一個向量,所以 path 變成了一個字符串向量,當你調用read.csv你將一次傳遞所有路徑而不是一個。 嘗試將上面的行更改為

path<-paste(directory,"/",id[i],".csv",sep="")

看看這是否有效。

您的文件路徑似乎有問題。 您將完整的向量 id =c(1:332) 傳遞給文件路徑名。 如果您的文件名為 1.csv、2.csv、3.csv 等。
您可以更改此行:

path<-paste(directory,"/",id,".csv",sep="")

path<-paste(directory,"/",i,".csv",sep="")

並省略或返工函數的 id 輸入。

您可以嘗試使用sapply ,而不是使用for來讀取數據。 例如

mydata <- sapply(path, read.csv)

由於path是一個向量, sapply將迭代該向量並將read.csv應用於它。 因此,將不需要的for循環和你的代碼將是干凈多了。

從那里您將擁有一個matrix ,其中包含您的每個文件及其各自的信息,您可以從中提取觀察結果。

要找到觀察結果,您可以執行mydata[2,1][[1]] 請記住,行將是您的因素,而您的列將是您的文件。

我正在解決確切的問題.. 目錄“specdata”中的文件名以 001.csv 和 002.csv 命名.... 099.csv 一直到文件 332.csv 但是,當您回憶 id= 1 那么你的文件名變成 1.csv 目錄中不存在的。 嘗試使用此函數獲取每個 id 文件的路徑。

filepaths <- function (id){
    allfiles = list.files(getwd())
    file.path(getwd(), allfiles[id])
}

我在這句話中遇到了同樣的問題:

Browse[2]> read.csv(list.files(".", "XCMS-annotated-diffreport--.*csv$"), row.names = 1)
Error in file(file, "rt") : invalid 'description' argument

然后,我發現同一路徑中有兩個不同的 csv 文件,如下所示:

Browse[2]> list.files(".", "XCMS-annotated-diffreport--.*csv$")
[1] "XCMS-annotated-diffreport--1-vs-2-Y.csv" "XCMS-annotated-diffreport--1-vs-2.csv"  

當我刪除一個文件時,它又可以工作了。

在我的代碼中,問題是我輸錯了文件名。 另一個文件不在這個目錄中。 因此,檢查所有文件是否都在它們應該在的位置。

我遇到這個問題是因為我試圖對數據框而不是向量運行 for 循環:

  ids <- th[th$nobs > threshold,]
  for(i in ids) {

這就是變量“ids”的樣子:

     id nobs
2     2 1041
154 154 1095
248 248 1005

本來應該:

  ids <- th[th$nobs > threshold,]
  for(i in ids$id) {

將對象 id 更改為 i - 因為您在循環中使用迭代對象 i ie path<-paste(directory,"/",id,".csv",sep="") 到 ie path<-paste(directory," /",i,".csv",sep="")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM