[r] R 스크립트에서 여러 줄로 코드 분할

R 스크립트에서 한 줄을 여러 줄로 나누고 싶습니다 (너무 길기 때문에). 어떻게합니까?

구체적으로 다음과 같은 줄이 있습니다

setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')

긴 경로를 여러 줄로 나눌 수 있습니까? 나는 시도했다

setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')

return제 1 라인의 끝에서 키; 그러나 그것은 작동하지 않습니다.

감사.



답변

여러 줄로 코드 를 나누지 않고 단일 식별자 . 차이가 있습니다.

문제의 경우 시도해보십시오

R> setwd(paste("~/a/very/long/path/here",
               "/and/then/some/more",
               "/and/then/some/more",
               "/and/then/some/more", sep=""))

또한 여러 줄에 걸쳐 코드를 나누는 것이 완벽하다는 것을 보여줍니다.


답변

바, 댓글이 너무 작습니다. 어쨌든 @Dirk는 매우 옳습니다.

R은 다음 줄에서 코드가 시작된다고 말할 필요가 없습니다. 그것은 파이썬 ;-)보다 더 똑똑하며 문장이 “완료되지 않은”것으로 간주 될 때마다 다음 줄을 계속 읽을 것입니다. 실제로, 귀하의 경우에도 다음 줄로 갔지만 R은 “”사이에있을 때 문자로 반환을 취합니다.

코드가 완성되지 않았는지 확인해야합니다. 비교

a <- 1 + 2
+ 3

a <- 1 + 2 +
3

따라서 코드를 여러 줄로 펼칠 때 R이 무언가를오고 있는지 확인해야합니다.

  • 브래킷을 열어 ​​두거나
  • 연산자로 줄을 끝내기

우리가 줄을 말할 때, 이것은 여전히 ​​작동하지만 약간 조심해야합니다. 따옴표를 열면 닫을 때까지 R이 읽습니다. 그러나 개행을 포함한 모든 문자는 문자열의 일부로 표시됩니다.

x <- "This is a very
long string over two lines."
x
## [1] "This is a very\nlong string over two lines."
cat(x)
## This is a very
## long string over two lines.

이것이이 경우 코드가 작동하지 않는 이유입니다. 경로는 개행 문자 ( \n)를 포함 할 수 없습니다 . 그 또한 그래서 왜 당신은 더 나은과 솔루션 사용 paste()또는 paste0()더크 제안합니다.


답변

Dirk의 방법은 절대적으로 효과가 있지만 공백 / 구조가 보존되어야하는 긴 문자열을 가져 오는 방법을 찾고 있다면 (예 : RODBC를 사용하는 SQL 쿼리) 두 단계 솔루션이 있습니다.

1) 텍스트 줄을 여러 줄로 가져옵니다.

long_string <- "this
is
a
long
string
with
whitespace"

2) R은 많은 \n문자를 소개합니다 . 설명서에strwrap() 따라 공백을 제거하는을 사용하여 제거 하십시오 .

strwrap(long_string, width=10000, simplify=TRUE)

strwrap이 텍스트를 매우 긴 줄로 감싸도록 지시하면 공백 / 줄 바꿈 문자가없는 단일 문자 벡터를 얻게됩니다.


답변

이 특별한 경우에는 다음이 있습니다 file.path.

File <- file.path("~",
  "a",
  "very",
  "long",
  "path",
  "here",
  "that",
  "goes",
  "beyond",
  "80",
  "characters",
  "and",
  "then",
  "some",
  "more")
setwd(File)


답변

이 게시물이 오래되었다는 것을 알고 있지만 이와 같은 상황이 있었고 내 솔루션을 공유하고 싶습니다. 위의 모든 대답은 잘 작동합니다. 그러나 data.table chaining Syntax와 같은 코드가 있으면 조금 어려워집니다. 예를 들어 이런 문제가있었습니다.

mass <- files[, Veg:=tstrsplit(files$file, "/")[1:4][[1]]][, Rain:=tstrsplit(files$file, "/")[1:4][[2]]][, Roughness:=tstrsplit(files$file, "/")[1:4][[3]]][, Geom:=tstrsplit(files$file, "/")[1:4][[4]]][타임스]<=12000]

위의 제안 중 대부분을 시도했지만 작동하지 않았습니다. 그러나 나는 안에 쉼표 뒤에 나눌 수 있다는 것을 알았습니다 []. 에서 분할이 ][작동하지 않습니다.

mass <- files[, Veg:=tstrsplit(files$file, "/")[1:4][[1]]][,
    Rain:=tstrsplit(files$file, "/")[1:4][[2]]][,
    Roughness:=tstrsplit(files$file, "/")[1:4][[3]]][,
    Geom:=tstrsplit(files$file, "/")[1:4][[4]]][`time_[s]`<=12000]


답변