文件(文件“rt”中的错误:无效';说明';complete.cases程序中的参数
我正在编写一个R函数,它读取一个满是文件的目录,并报告每个数据文件中完全观察到的案例数。函数返回一个数据帧,其中第一列是文件名,第二列是完整案例数 比如,文件(文件“rt”中的错误:无效';说明';complete.cases程序中的参数,r,R,我正在编写一个R函数,它读取一个满是文件的目录,并报告每个数据文件中完全观察到的案例数。函数返回一个数据帧,其中第一列是文件名,第二列是完整案例数 比如, id nobs 1 108 2 345 ... etc 以下是我编写的函数: complete <- function(directory, id = 1:332) { for(i in 1:332) { path<-paste(directory,"/",id,".csv",sep="") mydat
id nobs
1 108
2 345
...
etc
以下是我编写的函数:
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)
}
但我得到了一个错误:
Error in file(file, "rt") : invalid 'description' argument
我还尝试了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)
如果没有一个完全可复制的示例,很难判断,但我怀疑您的问题在于这一行:
path<-paste(directory,"/",id,".csv",sep="")
path<-paste(directory,"/",id,".csv",sep="")
看看是否有效。您的文件路径似乎有问题。 您正在将完整向量id=c(1:332)传递给文件路径名。 如果文件名为1.csv、2.csv、3.csv等…
您可以更改此行:
path<-paste(directory,"/",id,".csv",sep="")
path<-paste(directory,"/",id,".csv",sep="")
path您可以尝试sapply
,而不是使用for
读取数据。比如说
mydata我正在研究确切的问题。。目录“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])
}
filepath我遇到了这个问题,因为我试图对数据帧而不是向量运行for循环:
ids <- th[th$nobs > threshold,]
for(i in ids) {
应该是:
ids <- th[th$nobs > threshold,]
for(i in ids$id) {
ids阈值,]
用于(id$id中的i){
我在这句话中遇到了同样的问题:
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"
当我删除一个文件时,它会再次工作。将对象id更改为I-因为您在迭代对象I的for循环中
i、 谢谢Jonathan的快速回复。它解决了错误。谢谢Nathan帮助我解决了问题,让我明白我在哪里犯了错误。
Browse[2]> read.csv(list.files(".", "XCMS-annotated-diffreport--.*csv$"), row.names = 1)
Error in file(file, "rt") : invalid 'description' argument
Browse[2]> list.files(".", "XCMS-annotated-diffreport--.*csv$")
[1] "XCMS-annotated-diffreport--1-vs-2-Y.csv" "XCMS-annotated-diffreport--1-vs-2.csv"