[英]How can I return a function's argument after the original value has been overwritten?
我知道 R 有一個簡單的方法可以做到這一點,但我無法回憶起它。 假設我有這個糟糕的代碼:
add2<-function(n)
{
n<-n+2
return(paste(n,"added to 2 is",n))
}
顯然,add2(4) 會返回一些愚蠢的東西,比如“6 加到 2 是 6”。 我知道 R 有一種方法可以返回這個 function 的原始參數,這會給我我的預期行為,即 Z78E6221F6393D1356681DB398F16CE6DZ “4 添加到 2”。 但它是什么? 換句話說,什么 function 應該替換我的返回值中的第一個 n?
注意:我不想要更好的方法來解決這個例子。 該示例故意過度簡化以顯示我真正追求的 function。
在您的情況下,根本不需要覆蓋n
。 以下代碼完全相同:
add2 <- function (n) {
paste(n, "added to 2 is", n + 2)
}
並且 function 名稱add2
具有誤導性,因為它暗示該函數的結果實際上是n + 2
而不是有關該計算的某些消息。
更一般地說,您很少想要覆蓋值。 創建一個新變量來保存計算結果幾乎總是更合適的:
add2 <- function (n) {
result <- n + 2
message(paste(n, "added to 2 is", result))
result
}
這將
這就是你所追求的嗎?
更確切地說,以下在少數情況下有效(但不是一般情況下):
add2 <- function (n) {
n <- n + 2
paste(match.call()$n, "added to 2 is", n)
}
這就是失敗的原因:
add2(1 + 2)
# [1] "+ added to 2 is 5" "1 added to 2 is 5" "2 added to 2 is 5"
......這是對match.call
的濫用。
根據評論中的討論, match.call
是您所追求的嗎?
add2<-function(n)
{
x <- match.call()
n<-n+2
print(x)
print(names(x))
print(x$n)
return(paste(n,"added to 2 is",n))
}
add2(4)
add2(n = 4)
[1] "" "n"
[1] 4
[1] "6 added to 2 is 6"
你可以試試:
add2<-function(n)
{
n1<-n+2
return(paste(n,"added to 2 is",n1))
}
add2(4)
[1] "4 added to 2 is 6"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.