2016-04-19 4 views
1

ファイルのリストから大きなxtsデータセットを作成しようとしています。私はread.cqgread.zooas.xtsを使用してデータをxtsオブジェクトに読み込み/変換するユーザー定義関数である以下のように明示的にすることでこれを達成できました。したがって、それぞれread.cqg呼び出しはxtsオブジェクトを返します。rbind.xtsとユーザー定義関数を使用して、大きなxtsオブジェクトをファイルリストから構築する

以下のコードは機能し、大きなxtsオブジェクトを返します。

large_xts_object <- rbind.xts(read.cqg("somefile01.txt"), 
           read.cqg("somefile02.txt"), 
           read.cqg("somefile03.txt"), 
           read.cqg("somefile04.txt"), 
           read.cqg("somefile05.txt"), 
           read.cqg("somefile06.txt"), 
           read.cqg("somefile07.txt")) 

私は明示的にファイル名を記述することを避けるために、正規表現とlapplyを使用したいと思います。これはlapplyの使用を理解し、コードを短縮するのに役立ちます。

これは私の試みですが、私が望む結果が得られません。

large_xts_obj <- rbind.xts(lapply(list.files(pattern="^somefile*.*txt"), read.cqg)) 

これは、1つの大きなxtsオブジェクトではなく、大きなxtsオブジェクトのリストを返します。 rbind.xts、私のカスタムread.cqg関数、list.filespattern引数を使用して、必要な単一のxtsオブジェクトを作成するにはどうすればよいですか?

+0

'ファイル=のlist.files(パターン= "^ファイル* * TXT。")、large_xts_object < - do.call( "rbind.xts"、lapply(ファイル、FUN = read.cqg))'これは、list.files()の定義されたファイルのように思えます。do.call idk – cdcaveman

答えて

1

メソッド(例:rbind.xts)を直接呼び出してはいけません。汎用関数を使ってRにメソッドディスパッチをさせてください。それ以外に、あなたのコメントのコードは正しいです。

do.callを使用すると、関数とパラメータのリストを指定することで、関数呼び出しを作成して評価することができます。この場合、パラメータリストはread.cqgで読んだxtsオブジェクトのリストです。

files <- list.files(pattern = "^files*.*txt") 
xts_object_list <- lapply(files, read.cqg) 
large_xts_object <- do.call(rbind, xts_object_list) 
+0

を使用しました。私はこのベンチャーを通じてS3メソッドが何であるか少し勉強しました。 – cdcaveman

関連する問題