R'deki bir dosyaya metin satırları yazma


341

R komut dosyası dilinde, nasıl metin satırları yazarım, örneğin aşağıdaki iki satır

Hello
World

"output.txt" adlı bir dosyaya?

Yanıtlar:


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

7
İşaretle - Ne hepsi aynı dosyaya satır eklemek istiyorum birkaç iş parçacığı varsa? (Sorun şu ki, bir dosyaya birden fazla bağlantınız olamaz, yanılmıyorsam) Teşekkürler.
Mart'ta Tal Galili

8
@Tal, bu mükemmel bir soru, bunu yeni ve ayrı bir soru olarak yayınlamalısınız, böylece biraz dikkat çekecek. Buralarda benden çok daha bilgili R programcıları var!
Mark

8
Bunun için "output.txt" dosyasının zaten mevcut olması gerektiğini unutmayın. Başlamazsa, önce 'file.create ("output.txt")' kullanılarak oluşturulmalıdır.
jhin

20
@jhin Bunun doğru olup olmadığından emin değilim. RStudio 0.98 ve R sürüm 3.1.0 kullanıldığında dosya yoksa otomatik olarak oluşturulur
JHowIX

4
Seçeneği writeLines()yaklaşık on kat daha hızlı daha sonra birleşimidir sink()vecat()
rafa.pereira

151

Aslında yapabilirsiniz bunu yapmak sink():

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

dolayısıyla:

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

sink () üzerinde çalışmaz. Tüm bunları bir fonksiyonun içine koyup bu fonksiyonu capture.output (funciton call, filename) gibi adlandırabilirsiniz
abdkumar

109

cat()Bu örnekte olduğu gibi komutu kullanacağım :

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

Daha sonra R ile sonuçları

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

7
Sürekli bir dosyayı açar ve kapatır. Bu yaklaşım verimsiz olabilir.
mlt

56

Basit olan ne writeLines()?

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

veya

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

1
girişin bir çizgi vektörü olmadığını göstermek güzel
tim

1
@tim Aslında "Hallo\nWorld"karakter tipinin uzunluk bir vektörüdür. Sadece denetxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
zero323

Bu sadece benim için çalışıyor writeLines(txt, con="outfile.txt").
Palec

nope, ikinci bağımsız değişken olarak geçerli bir dosya adı verdiğiniz sürece bağımsız değişkenleri adlandırmadan çalışmalıdır.
petermeissner

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

17

Bunu tek bir açıklamada yapabilirsiniz

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

13

Öneririm:

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

Şu an kabul edilen cevaptan daha kısa ve daha doğrudan. Yapmanız gerekli değildir:

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

Çünkü için belgeler writeLines()diyor ki:

Eğer conbir karakter dizesidir, fonksiyon çağrıları fileişlev çağrısı süresince açılmış bir dosya bağlantısı elde etmek.

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

4

tidyverse baskı boru ve write_lines()readr

library(tidyverse)
c('Hello', 'World') %>% write_lines( "output.txt")

3

R'deki bir dosyaya metin satırları yazmanın kısa yolları , birçok cevapta zaten gösterildiği gibi cat veya writeLines ile gerçekleştirilebilir . En kısa olasılıklardan bazıları şunlar olabilir:

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

"\ N" yi beğenmiyorsanız aşağıdaki stili de kullanabilirsiniz:

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

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

İken writeLines bir ekler satırsonu için durum böyle değil neyi dosyanın sonuna kedi . Bu davranış aşağıdakiler tarafından ayarlanabilir:

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

Ama temel fark olmasıdır kedi kullandığı nesneleri R ve writeLines bir karakter vektör argüman olarak. Bu nedenle, örneğin 1:10 sayılarının writeLines için dökülmesi gerekirken, kedide olduğu gibi kullanılabilir:

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

2

Olasılıklar üzerinden yuvarlak için kullanabilirsiniz writeLines()ile sink()isterseniz:

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

Bana göre, her zaman kullanımı en sezgisel görünüyor print(), ancak bunu yaparsanız çıktı istediğiniz gibi olmaz:

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

2

En iyi cevaba dayanarak :

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

yourObjectBir dize biçiminde olması gerektiğini unutmayın ; kullanımas.character()gerekiyorsa dönüştürmek için .

Ama bu her şey için çok fazla yazıyor kaydetme girişimi . RStudio'da bir snippet oluşturalım.

Genel Seçenekler >> Kod >> Parçacık alanına şunu yazın:

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

Ardından, kodlama sırasında yazın wfileve tuşuna basınTab .


file <- file(...)Satır bana şüpheli görünüyor. Hem filebir işlev olarak çağırmak hem de fileyeni bir anlam vermek değil mi? Does file()bile kod çalışır bu parça sonra işi? Şu anda kendimi test etmek için R kurulumuna
erişemiyorum

benim kurulum üzerinde çalıştı @Palec Eğer sizin için dosyayı değiştirebilirsinizDosya ayrılmış kelimeler ile bazı sorun varsa
Luis Martins

1

Çirkin sistem seçeneği

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

Basit olan ne olacak write.table()?

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

Parametreler col.names = FALSEve row.names = FALSEtxt'deki satır ve sütun adlarını hariç tuttuğunuzdan emin olun ve parametre, quote = FALSEtxt'deki her satırın başında ve sonunda bu tırnak işaretlerini hariç tutar. Verileri tekrar okumak için kullanabilirsiniz text = readLines("output.txt").


0

R'nin yeni sürümlerinde, writeLinesmetninizdeki dönüşleri ve boşlukları koruyacaktır, bu nedenle \nsatırların sonuna eklemenize gerek yoktur ve bir dosyaya büyük bir metin parçası yazabilirsiniz. Bu örnekle çalışacaktır,

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

Ancak bu kurulumu, yalnızca yapıya sahip metinler (satır aralıkları veya girintiler) eklemek için de kullanabilirsiniz.

txt <- "Hello
   world
 I can 
   indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.