我希望使用substitute()
在表達式中執行變量替換,而不計算表達式。例如,我有:使用替代方法在R表達式中執行變量替換
expr1 <- expression(if(x){
return(y)
} else {
return(z)
})
我想什麼做的就是分配得到以下結果爲 「表達式1」:
expression(if(cos(x)){
return(y)
} else {
return(z)
})
通過做這樣的事情:
expr2 <- substitute(expr1, list(x=cos(x)))
但是這不起作用,因爲替代品並沒有評估它的第一個參數。所以我只是找回原來的變量:
expr1
現在here它說,做替換分配給一個變量的表情,我必須執行substitute()
兩次,後面eval()
,就像這樣:
expr2 <- eval(substitute(substitute(e, list(x = cos(x))), list(e = expr1)))
當我執行該語句,我得到分配到「表達式2」的表現,但它不包含所需的替代:
expression(if (x) {
return(y)
} else {
return(z)
})
我可以申請什麼語法「表達式1」,使我得到的結果,我想分配到「表達式2」,即:
expression(if (cos(x)) {
return(y)
} else {
return(z)
})
非常感謝你。這兩種解決方案(你的和小的)產生一個「if」類對象。我確實想要保留這個表達式,但是當我將expr2(即:expression(expr2))包裝好後,我得到了「expression(expr2)」而不是「expression(if(cos(x)) ...)「。顯然我沒有正確包裝。任何指導? – user3990797
@ user3990797對不起。我的意思是你可以在'do.call()'周圍使用'as.expression()'。我已經更新了我的答案。 – MrFlick
沒問題,很高興幫助和學習了一些東西。我也在我的答案中添加了'as.expression()'註釋。 –