source

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

nicesource 2023. 6. 13. 22:24
반응형

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첫 번째 줄 끝에 있는 키입니다. 그러나 이 키는 작동하지 않습니다.

감사해요.

아, 댓글이 너무 적어요.어쨌든, @Dirk는 매우 옳습니다.

R은 코드가 다음 줄에서 시작한다는 말을 들을 필요가 없습니다.그것은 Python ;-)보다 더 똑똑하며, 그 진술이 "끝나지 않았다"고 생각할 때마다 다음 줄을 계속 읽을 것입니다.사실, 당신의 경우에도 다음 줄로 갔지만, 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()더크가 청혼했어요

여러 줄에 걸쳐 코드를 해독하는 것이 아니라 단일 식별자를 사용하는 것입니다.차이가 있습니다.

당신의 문제를 위해, 시도해 보세요.

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

이는 또한 여러 줄에 걸쳐 코드를 해독하는 것이 완벽하게 괜찮다는 것을 보여줍니다.

위의 Dirk 방법은 확실히 효과적이지만 공백/구조를 보존해야 하는 긴 문자열을 가져오는 방법을 찾고 있다면 2단계 솔루션이 있습니다(예: RODBC를 사용한 SQL 쿼리).

여러 줄에 걸쳐 텍스트 문자열 가져오기

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

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과 같은 코드가 있는 경우에는 이와 같은 문제가 있었습니다.

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]]][시간_[s]<=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]

glue::glue기능이 도움이 될 수 있습니다.스크립트에서 여러 줄에 문자열을 쓸 수 있지만 각 줄을 다음으로 종료하여 문자열 개체에서 줄 바꿈을 제거할 수 있습니다.\\:

glue("some\\
     thing")

something

R에 문자열 연결을 수행할 연산자가 없기 때문에 이 작업을 수행할 수 있는 부수적인 방법이 없습니다.

그러나 문자열 연결을 수행하도록 R Infix 연산자를 정의할 수 있습니다.

`%+%` = function(x,y) return(paste0(x,y))

그런 다음 문자열을 콘타트하는 데 사용할 수 있으며 코드를 여러 줄로 구분할 수도 마찬가지입니다.

s = "a" %+%
    "b" %+%
    "c"

그러면 "abc"가 표시됩니다.

저는 이것을 항상 합니다.paste0() 함수를 사용합니다.

Rootdir = "/myhome/thisproject/part1/"
Subdir = "subdirectory1/subsubdir2/"

fullpath = paste0( Rootdir, Subdir )

fullpath

> fullpath
[1] "/myhome/thisproject/part1/subdirectory1/subsubdir2/"

이렇게 하면 \n 문자가 유지되지만 따옴표를 괄호로 묶을 수도 있습니다.특히 RM Markdown에서 유용합니다.

t <- ("
this is a long
string
")

언급URL : https://stackoverflow.com/questions/6329962/split-code-over-multiple-lines-in-an-r-script

반응형