36

ファイルでいっぱいのディレクトリを読み取り、各データ ファイルで完全に観察されたケースの数を報告する R 関数を作成しています。この関数は、最初の列がファイルの名前で、2 番目の列が完了したケースの数であるデータ フレームを返します。

そのような、

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)
}

私は機能を実行します:

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

しかし、私はこのエラーが発生しています:

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)
4

7 に答える 7

47

完全に再現可能な例がないとわかりにくいですが、問題は次の行にあると思われます。

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

idここではベクトルなので、パスは文字列のベクトルになり、呼び出すと、read.csv1 つではなくすべてのパスを一度に渡します。上記の行を次のように変更してみてください

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

それが機能するかどうかを確認します。

于 2013-01-20T01:57:17.377 に答える
8

forを使用してデータを読み取る代わりに、 を試すことができますsapply。例えば

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

pathはベクトルなので、ベクトルsapplyを反復して適用read.csvします。forしたがって、ループが不要になり、コードがよりクリーンになります。

そこからmatrix、観測を抽出できる各ファイルとそれぞれの情報が得られます。

観測を見つけるには、次のことができますmydata[2,1][[1]]。行が要素になり、列がファイルになることを忘れないでください。

于 2014-12-06T22:56:17.827 に答える
8

ファイルパスに問題があるようです。完全なベクトル id =c(1:332) をファイル パス名に渡しています。ファイルの名前が 1.csv、2.csv、3.csv などの場合、次の
行を変更できます。

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

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

関数の id 入力を省略するか、作り直します。

于 2013-01-20T02:12:05.607 に答える
2

私は正確な問題に取り組んでいます..ディレクトリ「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])
}
于 2016-04-03T18:17:25.513 に答える
1

この文で同じ問題に遭遇しました。

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

次に、次のように、同じパスに 2 つの異なる 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"  

1つのファイルを削除すると、再び機能します。

于 2016-08-22T07:44:18.177 に答える