web-dev-qa-db-ja.com

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キーがあります。しかし、それは機能しません。

ありがとう。

122
Curious2learn

codeを複数行に分割するのではなく、単一の識別子を分割します。違いがあります。

あなたの問題については、試してください

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

また、コードを複数の行に分割することもまったく問題ないことを示しています。

97

バハ、コメントが小さすぎます。とにかく、@ 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() Dirkが提案したソリューションを使用した方がよいのです。

130
Joris Meys

上記のDirkの方法は完全に機能しますが、空白/構造を維持することが重要な長い文字列を取り込む方法を探している場合(例:RODBCを使用したSQLクエリ)、2段階の解決策があります。

1)複数の行にテキスト文字列を取り込む

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

2)Rは\n文字の束を導入します。 documentation に従って、空白を破壊するstrwrap()でそれらを取り除きます。

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

Strwrapにテキストを非常に長い行に折り返すように指示すると、空白文字や改行文字のない単一の文字ベクトルが得られます。

31
Andrew

その特定の場合にはfile.pathがあります:

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

Rの新規ユーザーとして、上記の回答のいずれも質問に応答しなかったことに気付きました!!答えはコードについて尋ね、いくつかの例はデータの読み取りに焦点を合わせました。それでも、Rstudioコンソールで結果をカットアンドペーストしたコードは次のとおりです。

> poisson.lik <- function(lambda,Trades,Trades_Freq){
+     n <- length(Trades)
+     logl <- sum(Trades*Trades_Freq)*log(lambda) - n*lambda  – 
Error: unexpected input in:
"    n <- length(Trades)
    logl <- sum(Trades*Trades_Freq)*log(lambda) - n*lambda  –"
>     sum(log(Trades_Freq))
Error: object 'Trades_Freq' not found
>     return(-logl)
Error: object 'logl' not found
> }
Error: unexpected '}' in "}"

-の最後にコンマを追加してみました。また、改行を押して、エンドピースを新しい行で開始しようとしました。どれもうまくいきませんでした。信じられないほど、私はそれを実行させるために以下に示すようにパッチとして2つの部分に行を分割しなければなりませんでした!!それがRの問題だとは信じられません。

> poisson.lik <- function(lambda,Trades,Trades_Freq){
+     n <- length(Trades)
+     logl1  <- sum(Trades*Trades_Freq)*log(lambda) - n*lambda 
+     logl2  <-  - sum(log(Trades_Freq)) 
+     logl <- logl1 + logl2
+     return(-logl)
+ }
> 
0
Go C