文件中的错误(文件,"rt"):complete.cases程序中的'description'参数无效

Pra*_*dya 23 r

我正在编写一个R函数,它读取一个充满文件的目录,并报告每个数据文件中完全观察到的案例的数量.该函数返回一个数据框,其中第一列是文件的名称,第二列是完整案例的数量.

如,

id nobs
1  108
2  345
...
etc
Run Code Online (Sandbox Code Playgroud)

这是我写的函数:

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)
}
Run Code Online (Sandbox Code Playgroud)

我执行功能:

complete("specdata",id=1:332)
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

Error in file(file, "rt") : invalid 'description' argument
Run Code Online (Sandbox Code Playgroud)

我也试过traceback()调试我的代码的函数,它给出了这个输出:

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)
Run Code Online (Sandbox Code Playgroud)

Jon*_*sen 36

没有一个完全可重复的例子很难说,但我怀疑你的问题是这一行:

path<-paste(directory,"/",id,".csv",sep="")
Run Code Online (Sandbox Code Playgroud)

id这是一个向量,所以path成为字符串的向量,当你调用时,read.csv你将所有路径一次性传递给它,而不是只传递一个.尝试将上面的行更改为

path<-paste(directory,"/",id[i],".csv",sep="")
Run Code Online (Sandbox Code Playgroud)

并看看是否有效.


Jee*_*hah 7

for您可以尝试使用 ,而不是使用 a来读取数据sapply。例如

mydata <- sapply(path, read.csv).

由于path是一个向量,sapply将迭代该向量并应用于read.csv它。因此,将不需要for循环,您的代码将更加简洁。

从那里您将获得matrix每个文件及其各自的信息,您可以从中提取观察结果。

要找到观察结果,您可以执行mydata[2,1][[1]]. 请记住,行将是您的因素,而您的列将是您的文件。


N8T*_*TRO 5

您的文件路径似乎有问题.您将完整的向量id = c(1:332)传递给文件路径名.如果您的文件名为1.csv,2.csv,3.csv等.
您可以更改此行:

path<-paste(directory,"/",id,".csv",sep="")
Run Code Online (Sandbox Code Playgroud)

path<-paste(directory,"/",i,".csv",sep="")
Run Code Online (Sandbox Code Playgroud)

并省略或重写你的功能的id输入.