2016-07-31 2 views
0

いくつかの固定幅形式のtxtファイルをRに読み込みたいのですが、まずそれらを解凍する必要があります。ファイルを解凍しているときにread_fwfが動作しない

非常に大きいファイルなので、readrパッケージのread_fwfを使用したいと思っています。非常に高速です。

私は:

read_fwf(unz(zipfileName, fileName), fwf_widths(colWidths, col_names = colNames))

私はしかし私が行うときに、このエラーにError in isOpen(con) : invalid connection

を得る:

read.table(unz(zipfileName, fileName))それはRにうまく読み込ん幅をspecfiyingなし。なぜこれがread_fwfと連携していないのかについての考えはありますか?

再現性のある例を作成するのに問題があります。ここで私が得たものである:

df <- data.frame(
    rnorm(100), 
    rnorm(100) 
) 

write.table(df, "data.txt", row.names=F, col.names = F) 
zip(zipfile = "data.zip", files = "data.txt") 
colWidths <- rep(2, 100) 
colNames <- c("thing1","thing2") 
zipfileName <- "data.zip" 
fileName <- "data.csv" 
+0

私は1つの列しか見ません。私もあなたが 'zipfileName'を定義しているのを確認していません。 –

+0

@ 42件の編集で、問題の例が一致しています。 – Warner

+0

'?unz'をもっと慎重に読んでください。特に: ''description'は、zipファイルへのフルパスで、必要に応じて '.zip'拡張子が付きます。" –

答えて

1

私も悩み、それにunz -edファイルを渡すが、その後、私はZIPファイルが自動的に処理されることを約束されていることがわかり?read_fwfページを読み込むときにzipファイルを読むためにread_fwfを取得していました。列のどちらも一定のポジションを持っていたので、あなたは、一例として、有効なFWFたファイルをしなかったが、それは、出力とは明らかである:

read_fwf(file="~/data.zip", fwf_widths(widths=rep(16,2) ,col_names = colNames)) 
Warning: 1 parsing failure. 
row col expected actual 
    3 thing2 16 chars  14 
# A tibble: 100 x 2 
      thing1    thing2 
       <chr>    <chr> 
1 1.37170820802141 -0.58354018425322 
2 0.03608988699566 7 -0.402708262870141 
3 1.02963272114 -1  .0644333112294 
4 0.73546166509663 8 0.607941664550652 
5 -1.5285547658079 -0.319983522035755 
6 -1.4673290956901 0.523579231857175 
7 0.24946312418273 9 -0.574046655188405 
8 0.58126541455159 5 -0.406516495600345 
9 1.5074477698981 -0.496512994239183 
10 -2.2999905645658 8 -0.662667854341041 
# ... with 90 more rows 

あなたがなっていたエラーがあるためunz機能からでした"description"引数としてzip拡張ファイルへのフルパスが必要です(暗黙の作業ディレクトリの場所を受け入れないように見えます)。 2番目の引数は、zipファイル内の圧縮ファイルの名前です。私はそれが接続を返しますが、read_fwfが処理できる型ではないと思います。手でパースやって私たちの両方が得たエラーがread_connectionにコードのこのセクションからあったことを参照してください。

> readr:::read_connection 
function (con) 
{ 
    stopifnot(is.connection(con)) 
    if (!isOpen(con)) { 
     open(con, "rb") 
     on.exit(close(con), add = TRUE) 
    } 
    read_connection_(con) 
} 
<environment: namespace:readr> 

あなたはunzに有効な「説明」引数を与えていない、と我々は努力をした場合でも、 open(con, "rb")で開くと、さまざまなファイル処理関数の引数の標準化が不十分なために失敗します。

+0

私の場合、各zipファイルには、私がRに読みたい1つのファイルだけが含まれています。私は 'read_fwf'がいくつかのファイル。 – Warner

+1

私は2つの項目を持つzipファイルを与えたとき、最初のものを選んだ。 (私はzipファイルを完全なディレクトリに展開して、2番目以降のファイルが必要な場合はそれを使って作業しました) –

+0

これをチェックしていただきありがとうございます。これは知っておいてよかったですし、 'read_fwf'がどのようにzipファイルを扱うべきかについていくつかの意味があると思います。 – Warner

関連する問題