Записать строки текста в файл в R

246

На языке сценариев R, как писать строки текста, например. следующие две строки

Hello
World

в файл с именем "output.txt"?

Теги:
file-io

9 ответов

298
Лучший ответ
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)
  • 3
    Благодарю. Я возился с раковиной () и сообщением () в течение получаса. Это намного проще.
  • 7
    Отметьте - что, если у меня есть несколько потоков, все из которых я хотел бы добавить строки в один файл? (Проблема в том, что вы не можете иметь более одного соединения с файлом, если я не ошибаюсь) Спасибо.
Показать ещё 10 комментариев
116

На самом деле вы можете сделать это с помощью sink():

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

следовательно:

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

Я бы использовал команду cat(), как в этом примере:

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

Затем вы можете просмотреть результаты с помощью R с помощью

> file.show("outfile.txt")
hello
world
  • 5
    Он постоянно открывает и закрывает файл. Этот подход может быть неэффективным.
34

Как насчет простой writeLines()?

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

или

txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")
  • 1
    приятно показать, что на входе не обязательно должен быть вектор линий
  • 1
    @tim На самом деле "Hallo\nWorld" - это длина одного вектора типа символа. Просто попробуйте txt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
Показать ещё 4 комментария
17

1. Использование аргумента файла в cat.

 cat("Hello World", file="filename")

2. Используйте sink функцию перенаправить все выходные данные print и cat в файл.

 sink("filename")                     # Begin writing output to file
 print("Hello World")
 sink()                               # Resume writing output to console

ПРИМЕЧАНИЕ. Функция печати не может перенаправить свой вывод, но функция приемника может принудительно вывести весь файл в файл.

3. Создание подключения к файлу и запись.

con <- file("filename", "w")
cat("Hello World", file=con)
close(con)
9

Вы можете сделать это в одном утверждении

cat("hello","world",file="output.txt",sep="\n",append=TRUE)
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"
1

На основе лучший ответ:

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.

  • 0
    Строка file <- file(...) мне кажется подозрительной. Разве это не вызов file как функции и присвоение file новому значению? Работает ли file() даже после запуска этого фрагмента кода? У меня нет доступа к установке R, чтобы проверить себя прямо сейчас ...
  • 0
    это работает на моей установке @Palec Вы можете изменить файл на youFile, если у вас есть проблемы с зарезервированными словами
-2

Уродливая системная опция

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
  • 2
    Очень некрасиво, очень интересно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню