R의 파일에 텍스트 줄 쓰기


341

R 스크립팅 언어에서 텍스트 줄을 작성하는 방법 (예 : 다음 두 줄)

Hello
World

"output.txt"라는 파일로?

답변:


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

7
Mark-어떻게 여러 개의 스레드가 있다면 모두 같은 파일에 줄을 추가하고 싶습니다. (문제는 실수하지 않으면 파일에 둘 이상의 연결을 할 수 없다는 것입니다.) 감사합니다.
탈 Galili

8
@ 탈, 그것은 훌륭한 질문입니다, 당신은 약간의 관심을 끌 수 있도록 새로운 별도의 질문으로 게시해야합니다. 나보다 여기에 훨씬 더 지식이 풍부한 R 프로그래머가 있습니다!
Mark

8
이를 위해서는 "output.txt"파일이 이미 존재해야합니다. 그렇지 않으면 먼저 'file.create ( "output.txt")'를 사용하여 작성해야합니다.
jhin

20
@ jhin 그것이 사실인지 확실하지 않습니다. RStudio 0.98 및 R 버전 3.1.0을 사용하면 파일이 존재하지 않으면 자동으로 생성됩니다.
JHowIX

4
의 옵션은 writeLines()약 열 배 빠른 다음의 조합 sink()cat()
rafa.pereira

151

실제로 당신 그것을 할 수 있습니다sink() :

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

따라서 :

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

데이터 브릭에서 sink ()가 작동하지 않습니다. 이 모든 것을 함수 안에 넣고
capture.output

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

이것은으로 만 작동합니다 writeLines(txt, con="outfile.txt").
Palec

nope, 유효한 파일 이름을 두 번째 인수로 지정하면 인수 이름을 지정하지 않고도 작동합니다.
petermeissner

@ 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.

4

파이프 및 tidyverse 판 write_lines()readr에서

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

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 가 파일 끝에 개행 을 추가하는 동안 cat 의 경우가 아닙니다 . 이 동작은 다음을 통해 조정할 수 있습니다.

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

그러나 가장 큰 차이점은 것입니다 고양이 가 사용하는 객체 RwriteLines에게 문자 벡터 인수로합니다. 따라서 예를 들어 writeLines에 대해 1:10 의 숫자 를 캐스트해야하며 cat과 같이 사용할 수 있습니다.

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

내 설정 @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 = FALSErow.names = FALSETXT에 행과 열 이름을 제외 할 수 있는지 확인하고 매개 변수 quote = FALSE제외합니다 TXT 각 줄의 시작과 끝에서 그 인용 부호. 데이터를 다시 읽으려면을 사용할 수 있습니다 text = readLines("output.txt").


0

최신 버전의 R에서는 writeLines텍스트에 반환 및 공백이 유지되므로 \n줄 끝에 포함 할 필요가 없으며 하나의 큰 텍스트 청크를 파일에 쓸 수 있습니다. 이것은 예제와 함께 작동합니다.

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.