5

Rの関数に送信されるテキスト文字列をフォーマットするときに二重引用符を使用すると問題が発生します。

関数コードの例を考えてみましょう。

foo <- function( numarg = 5, textarg = "** Default text **" ){ 
    print (textarg)
    val <- numarg^2 + numarg
    return(val) 
}

次の入力で実行する場合:

foo( 4, "Learning R is fun!" )

出力は次のとおりです。

[1] "Learning R is fun!"
[1] 20

しかし、(ここで提案されているように)Rの代わりに「R」を書き込もうとすると、次の出力が得られます。

> foo( 4, "Learning R is fun!" )
[1] "Learning R is fun!"
[1] 20
> foo( 4, "Learning "R" is fun!" )
Error: unexpected symbol in "funfun( 4, "Learning "R"
> foo( 4, "Learning \"R\" is fun!" )
[1] "Learning \"R\" is fun!"
[1] 20
> foo( 4, 'Learning "R" is fun!' )
[1] "Learning \"R\" is fun!"
[1] 20

ここでas.character(...)またdQuote(...)はを使用すると、引数の数が異なるため、関数が機能しなくなるようです。

4

2 に答える 2

5

私が知っている2つの方法。1つは、一重引用符を使用して文字列を開始および終了することです。

> cat( 'Learning "R" is fun!' )
Learning "R" is fun!

2つ目は、二重引用符をエスケープすることです。

> cat( "Learning \"R\" is fun!" )
Learning "R" is fun!

catこれは、文字列をコンソールに出力することを目的としたを使用しているために機能することに注意してください。print()出力するのではなく、オブジェクトを表示するものを使用しているようです

于 2012-11-19T07:31:16.127 に答える
1

これらのアプローチを試すことができます。

foo <- function(numarg = 5, textarg = "** Default text **" ){ 
    cat(c(textarg, "\n")) 
    val <- (numarg^2) + numarg
    return(val) 
}

foo <- function(numarg = 5, textarg = "** Default text **" ){ 
    print(noquote(textarg)) 
    val <- (numarg^2) + numarg
    return(val) 
}

foo( 4, "Learning R is fun!" )
foo( 4, 'Learning "R" is fun!' )
于 2012-11-19T07:33:56.277 に答える