Rのファイルにテキスト行を書き込む


341

Rスクリプト言語では、テキスト行をどのように書きますか。たとえば、次の2行です。

Hello
World

「output.txt」という名前のファイルに?

回答:


420
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)

7
マーク-同じファイルに行を追加したいスレッドが複数ある場合はどうなりますか?(問題は、ファイルに複数の接続を確立できないことです。私が間違っていない場合)。ありがとうございます。
Tal Galili

8
@Tal、それはすばらしい質問です。注目を集めるために、新しい別の質問として投稿してください。この辺りには、私より知識のあるRプログラマーがたくさんいます!
マーク

8
これには、ファイル「output.txt」がすでに存在している必要があることに注意してください。そうでない場合は、最初に作成する必要があります。たとえば、「file.create( "output.txt")」を使用します。
jhin 2014

20
@jhinそれが本当かどうかはわかりません。RStudio 0.98とRバージョン3.1.0を使用すると、ファイルが存在しない場合は自動的に作成されます
JHowIX

4
オプションはand writeLines()の組み合わせよりも約10倍高速ですsink()cat()
rafa.pereira

151

実際にあなたはそれを行うことができますsink()

sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()

したがって:

file.show("outfile.txt")
# hello
# world

sink()はDatabricksでは機能しません。注意してください。これらすべてを関数内に配置して、capture.output(funciton call、filename)のようにこの関数を呼び出すことができます
abdkumar

109

cat()この例のようにコマンドを使用します。

> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)

次に、Rでの結果を

> file.show("outfile.txt")
hello
world

7
それは常にファイルを開いたり閉じたりします。このアプローチは非効率的かもしれません。
mlt

56

単純なものは何writeLines()ですか?

txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")

または

txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")

1
入力が行のベクトルである必要がないことを示すのはいいことです
tim

1
@tim実際に"Hallo\nWorld"は、文字タイプの長さ1のベクトルです。試してみてくださいtxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
zero323 '13 / 11/14

これは私としてのみ機能しwriteLines(txt, con="outfile.txt")ます。
Palec、2015

いいえ、2番目の引数として有効なファイル名を指定する限り、引数に名前を付けなくても機能します。
petermeissner 2015

@petermeissner> coefficients<-summary(model) > writeLines(coefficients, "coefficients") Error in writeLines(coefficients, "coefficients") : invalid 'text' argument
alhelal

17

あなたは単一のステートメントでそれを行うことができます

cat("hello","world",file="output.txt",sep="\n",append=TRUE)

13

私は提案します:

writeLines(c("Hello","World"), "output.txt")

現在受け入れられている回答よりも短く、より直接的です。以下を行う必要はありません。

fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)

のドキュメントはwriteLines()言うので:

場合はcon、文字列で、関数が呼び出されますfile、関数呼び出しの期間のために開かれているファイルの接続を取得します。

# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.


3

Rのファイルにテキスト行書き込む短い方法は、すでに多くの回答で示されているように、catまたはwriteLinesで実現できます。最短の可能性は次のとおりです。

cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")

「\ n」が気に入らない場合は、次のスタイルを使用することもできます。

cat("Hello
World", file="output.txt")

writeLines("Hello
World", "output.txt")

一方でwriteLines追加改行をするケースではありませんどのようなファイルの末尾に。この動作は、次の方法で調整できます。

writeLines("Hello\nWorld", "output.txt", sep="") #No newline at end of file
cat("Hello\nWorld\n", file="output.txt") #Newline at end of file
cat("Hello\nWorld", file="output.txt", sep="\n") #Newline at end of file

しかし、主な違いは、ある猫が使用するRオブジェクトwriteLines 文字ベクトルを引数として。したがって、たとえば1:10を書き出す場合は、猫でそのまま使用できるように、writeLinesにキャストする必要があります。

cat(1:10)
writeLines(as.character(1:10))

2

可能性を締めくくりするには、使用することができますwriteLines()sink()、あなたがしたい場合は、:

> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World

私にとっては、を使用するのprint()が常に最も直感的に思えますが、そのようにすると、出力が希望どおりにならない場合があります。

...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"

2

ベストアンサーに基づいて:

file <- file("test.txt")
writeLines(yourObject, file)
close(file)

yourObjectは文字列形式である必要があることに注意してください。as.character()必要に応じて変換に使用します。

しかし、これはすべての保存試行に対して入力が多すぎます。RStudioでスニペットを作成しましょう。

グローバルオプション>>コード>>スニペットで、次のように入力します。

snippet wfile
    file <- file(${1:filename})
    writeLines(${2:yourObject}, file)
    close(file)

次に、コーディング中にを入力してwfileを押しTabます。


file <- file(...)ラインは、私には疑わしいです。file関数として呼び出すこととfile、新しい意味を割り当てることの両方ではないですか?file()このコードを実行した後でも機能しますか?今すぐ自分をテストするためのRインストールに
アクセスできない

それは私のセットアップで動作しました@Palec予約語に問題がある場合は、ファイルをyouFileに変更できます
Luis Martins

1

醜いシステムオプション

ptf <- function (txtToPrint,outFile){system(paste(paste(paste("echo '",cat(txtToPrint),sep = "",collapse = NULL),"'>",sep = "",collapse = NULL),outFile))}
#Prints txtToPrint to outFile in cwd. #!/bin/bash echo txtToPrint > outFile

1

シンプルはwrite.table()どうですか?

text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)

パラメータcol.names = FALSEおよびrow.names = FALSETXTに行と列の名前を除外することを確認し、パラメータquote = FALSEを除外TXTの各行の最初と最後に、これらの引用符。データを読み戻すには、を使用できますtext = readLines("output.txt")


0

Rの新しいバージョンでwriteLinesは、テキストの改行とスペースが保持されるため\n、行末に含める必要はなく、1つの大きなテキストのチャンクをファイルに書き込むことができます。これは例で動作します、

txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)

ただし、この設定を使用して、構造(改行またはインデント)のテキストを単純に含めることもできます。

txt <- "Hello
   world
 I can 
   indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.