2012-01-30 11 views
133

Rでプレーンテキストファイルを単一文字列としてインポートするにはどうすればよいですか?これはおそらく非常に簡単な答えがあると思うが、私は今日これを試してみると、私はこれを行う関数を見つけることができませんでした。テキストファイルを1つの文字列としてインポートする

たとえば、テキスト入力したいファイルをfoo.txtとしているとします。

私はそれを試してみました:

scan("foo.txt", what="character", sep=NULL) 

が、これはまだベクトルを返されました。私はそれが多少働いて得た:

paste(scan("foo.txt", what="character", sep=" "),collapse=" ") 

が、それはあまりにも、おそらく不安定であり、非常に醜いソリューションです。

+5

'readr :: read_file'はこの問題をうまく解決します。 – Zach

答えて

156

ここで正しいサイズを代わりに使用しています@JoshuaUlrichからの溶液の変種ですreadCharが指定したバイト数のためのスペースを割り当て、そのreadChar(fileName, .Machine$integer.max)がうまく動作しないことを

fileName <- 'foo.txt' 
readChar(fileName, file.info(fileName)$size) 

が注...

:ハードコードされたサイズの
+0

+1は' nchars = 'について怠け者ではないためです。 :) –

+14

このコードは圧縮ファイルでは機能しません。その場合、file.info(filename)$ sizeによって返されるバイト数はメモリに読み込まれる実際の内容と一致しません。 – asieira

33

私は以下を使用します。それだけで正常に動作する必要がありますし、少なくとも私には、醜いいないようです:

singleString <- paste(readLines("foo.txt"), collapse=" ") 
+11

私は 'collapse =" \ n "'これらが元のファイルの別々の行であるという事実を複製することを期待しました。この変更により、このソリューション*は、圧縮されたファイルと圧縮されていないファイルに対して同様にうまく動作します。 – asieira

+0

これは動作していないようです。 writeLines(singleString)を指定すると、破損したファイルを取得します。 – bumpkin

+0

私のために働きました。私は1つの文字列のテキストファイルを持っていましたが – hmi2015

10

方法について:

string <- readChar("foo.txt",nchars=1e6) 
+2

+1:また、 'nchars = 1e6'の代わりに正しいサイズを使用する亜種を追加しました... – Tommy

1

readCharにはあまり柔軟性がないので、私はあなたのソリューション(readLinesとpaste)を組み合わせました。

私はまた、各ラインの間のスペース追加しました:

con <- file("/Users/YourtextFile.txt", "r", blocking = FALSE) 
singleString <- readLines(con) # empty 
singleString <- paste(singleString, sep = " ", collapse = " ") 
close(con) 
77

を、誰もが、まだ3年後にこの質問を見ている場合には、ハドレーウィッカムのreadrパッケージはあなたのためにこれを行います便利なread_file()機能を持っています。

install.packages("readr") # you only need to do this one time on your system 
library(readr) 
mystring <- read_file("path/to/myfile.txt") 
+1

"read_file"は現在stringrには表示されません。 : http://cran.r-project.org/web/packages/stringr/stringr.pdf –

+2

@mlkそれは 'readr'に移行されました。私はそれに応じて答えを更新しました - 私はシャロンが気にしないことを願っています –

+1

nice!また、.gzファイルを即座に解凍する –

2

シャロンの解決策はもはや使用できません。

read.text = function(pathname) 
{ 
    return (paste(readLines(pathname), collapse="\n")) 
} 

とこのようにそれを使用します:txt = read.text('path/to/my/file.txt')私は私の.Rprofileファイルにasieiraの修正とジョシュ・オブライエンのソリューションを追加しました。私はバンプキン(28 oct。14)の発見を再現できず、writeLines(txt)file.txtの内容を示しました。また、write(txt, '/tmp/out')の後には、diff /tmp/out path/to/my/file.txtコマンドで差異が報告されませんでした。

3

readrパッケージには、すべてを処理する機能があります。

install.packages("readr") # you only need to do this one time on your system 
library(readr) 
mystring <- read_file("path/to/myfile.txt") 

これは、パッケージstringrのバージョンを置き換えます。

関連する問題