2016-12-09 22 views
0

変数にデフォルト値を割り当てる慣習的な方法はありますか?しかし、それを上書きしないで既に割り当てられていますか?既に割り当てられていない限り、R変数にデフォルト値を割り当てますか?

現在、私はそこに3回繰り返される

myvar <- ifelse(exists("myvar"), myvar, "my default value") 

しかしmyvarのために定住しました。私は、引数を機能するようにデフォルト値を割り当てる方法を知っている(非常に簡潔である)何かがある場合、私は疑問に思う私は、変数名に

のようなものを繰り返す必要はありません構文を見つけることを期待していました。 「通常の」変数と同様です。私が提供するすべての「組み込み」を見つけることができなかったと私は私がしたい構文になった最も近いがこれです

+1

は、関数を使用しますか?大域変数は避けるべきです。 – Dason

+0

それが存在するかどうかを確認し(必要に応じて '<< - 'を使用しますか?しかし、あなたの答えの下で@Rolandによって指摘されているように、これはあなたが努力すべきものではありません。 –

答えて

0

:名前exists()そうでない場合、それならば

setdefault <- function(name, value) { 
    if (! exists(name)) { 
    cat("assign",name, "the value", value) 
    assign(name, value, pos=1) # in the parent environment 
    } else { 
    cat(name, "is already assigned. Skip\n") 
    } 
} 

setdefault("a", 20) 
cat(a,"\n") # 20 
setdefault("a", 30) 
cat(a,"\n") # 20 

ここで定義した関数setdefault()をチェックしますassign(name, value, pos=1)は、呼び出し側の環境でmyvar <- valueに相当します。

options()がグローバルへの代替として使用することができ、それらはすでにデフォルトのメカニズムを提供します。

getOption("a", 20) # 20 
options(a=30) 
getOption("a", 2) # 30 
+0

これはRでやっていなければならないことではありません。Rは関数型言語であることを試みます。関数の言語では、グローバルなデフォルトは必要ありません。 – Roland

関連する問題