2017-08-24 51 views
0

nameという変数を含むか含まないリストtestが表示されます。はNULLを文字列に変換します(空文字または文字通りNULLです)

名前でアイテムを取得すると、 nameが不足している場合はです。はNULLです。他のケースでは、tempの値が不十分なので、temp(その目的ではsprintfを使用します)というデフォルトの値を割り当てて、name value XXX is invalidのような警告を出したいと思います。

ただし、文字列に変換するのは苦労します。これにはRで1つのライナーがありますか?

as.characterは、character(0)を生成し、sprintfの引数の全体がcharacter(0)になります。

ワークフローは、一般的に次のようになります。

for (name in name_list){ 
    temp = test[[name]] 
    if(is.null(temp) || is_invalid(temp) { 
    warning(sprintf('%s is invalid parameter value for %s', as.character(temp), name)) 
    result = assign_default(name) 
    } else { 
    result = temp 
    print(sprintf('parameter %s is OK', name) 
    } 
    } 

PS。 is_invalidは、他の場所で定義された関数です。私は''または'NULL'を返すas.characterの代理人が必要です。

+0

これはまさしく私の意図ではありません。私は、ifelse(is.null(temp)|| is_invalid(temp)、sprintf( '%sは有効な名前ではなく、as.character(temp)) 'のようにしたいと思います。' as.character'だけが ' (0) ' –

+0

だから正しく理解したら' is_invalid'関数が必要なのですか? –

答えて

0

最終的に私の目標は2つの文字列を結合することでしたが、そのうちの1つは空(null)になる可能性がありました。私はただ警告文字列としてpaste(temp, "name is empty or invalid")を使用できます。それは正確にNULLを文字列に変換するわけではありませんが、解決策です。

+0

%name(x)の 'is_invalid < - function(x、name)! –

2
test = list(t1 = "a", t2 = NULL, t3 = "b") 

foo = function(x){ 
    ifelse(is.null(test[[x]]), paste(x, "is not valid"), test[[x]]) 
} 

foo("t1") 
#[1] "a" 

foo("t2") 
#[1] "t2 is not valid" 

foo("r") 
#[1] "r is not valid" 
関連する問題