4

まず、貼り付けと印刷の違いがよくわかりません。しかし、私は「print」を使用して一般的なステートメントを吐き出し、「paste」を使用して特定の変数を使用/参照するステートメントを吐き出します。

私の問題は、関数内で使用するときに、 " "ステートメントpasteの後に関数に何かが含まれていると、貼り付けた出力が失われることです。paste

次の3つの機能を参照してください。

TS<-5

例1-すべてが正常に機能する

T<-function(){

if(exists("TS"))
{paste("TS= ", TS, sep=" ")}

else

if(!exists("TS"))
{print.noquote("No TS Values")}

}

例2-私の問題。「if」ステートメントの後に何か(この場合は別の印刷コマンド)を追加すると、貼り付けた出力が失われます

T<-function(){

if(exists("TS"))
{paste("TS= ", TS, sep=" ")}

else

if(!exists("TS"))
{print.noquote("No TS Values")}

print("my exsistance removes paste output") 

}

例3-「if」の前に配置された同じステートメントは悪影響を及ぼしません

T<-function(){

print("my exsistance does not remove paste output")

if(exists("TS"))
{paste("TS= ", TS, sep=" ")}

else

if(!exists("TS"))
{print.noquote("No TS Values")}


}

誰かがこの関数内のどこに競合があるのか​​説明できますか?pasteさらに良いことに、関数内でステートメントの後に他のアクションを実行できるように、どのように回避できますか?

基本的に、例2を機能させるにはどうすればよいですか。

ブラウニーポイント-(視覚的な一貫性のために)「print.noquote」を使用する場合、paste.noquoteのようなものはありますか?

4

2 に答える 2

8

paste文字列を連結 (貼り付け) して文字ベクトルを返すので、次のようなことができます

paste('a','b', sep = '-')

## [1] "a-b"

print値を出力します。から?print

printはその引数を出力し、( 経由で)目に見えないように返しますinvisible(x)。これは、新しい印刷メソッドを新しいクラスに簡単に追加できることを意味する汎用関数です。

ほとんどのクラスには定義済みの印刷メソッドがあります (または使用しますprint.default) 。

次のように入力して、使用可能な印刷方法を確認できます。

methods('print')

あなたの場合 paste("TS= ", TS, sep=" ")、文字ベクトルを返すため、これが関数の結果である場合、print.character結果を表示するために使用されます

実際、私はあなたがしたくmessageないと思いますprintprint.noquote

T <- function() {
    if (exists("TS"))
    {
        message(paste("TS= ", TS, sep=" "))
    } else if (!exists("TS")) {
        message("No TS Values")
    }
    message("my exsistance removes paste output") 
}
于 2012-07-18T02:08:39.620 に答える
4

paste入力を連結して返します。関数が戻ると、変数に格納されていない場合、返されたものに対して print が呼び出されます。明示的な 'return' または 'invisible' ステートメントがない場合、関数は最後のトップ レベルの呼び出しを返します。

これらはすべて、最終的に表示されるものになります。貼り付けが最後に呼び出された関数である場合、連結された入力が返されます-これは関数によって返されます-変数に保存しないため、出力されます。何かを明示的に印刷したい場合はprint、 or messageorを使用するのが最善ですcat- これらはそれぞれわずかに異なる目的を果たします。

于 2012-07-18T02:04:32.003 に答える