2017-08-24 129 views
0

我收到一個列表test,它可能包含或缺少某個name變量。將`NULL`轉換爲字符串(空或者字面上`NULL`)

當我按名稱檢索項目時, temp = test[[name]]如果name缺失I tempNULL。在其他情況下,temp價值不足,因此我想要發出警告,如name value XXX is invalid,其中XXX是temp(我爲此使用sprintf)並指定了默認值。

但是,我很難將其轉換爲字符串。 R是否有單線程來做到這一點?

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是其他地方定義的函數。我需要Substitute as.character,這將返回'''NULL'

+0

這不完全是我的意思。我想要像'ifelse(is.null(temp)|| is_invalid(temp),sprintf('%s不是一個有效的名字,as.character(temp))''。只有'as.character'返回'字符(0)' –

+0

所以,如果我理解正確,你想要一個'is_invalid'函數? –

回答

0

好吧,最終我的目標是加入兩個字符串,其中一個可能爲空(空),我意識到,我可以使用paste(temp, "name is empty or invalid")作爲我的警告字符串。它並不完全將NULL轉換爲字符串,但它是一個解決方案。

+0

怎麼樣'is_invalid < - function(x,name)!name%in%names(x)'? –

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"