2
的功能將類似於:在R中,是否可以在函數內創建一個新對象並將其傳遞給父環境?
function(input, FUN, output) {
output <- FUN(input)
return(input)
}
輸出在哪裏是要創建一個對象的不帶引號的名稱。
讓我們跳過這可能是一個壞主意的部分:這種事情可能嗎?你會怎麼做呢?
的功能將類似於:在R中,是否可以在函數內創建一個新對象並將其傳遞給父環境?
function(input, FUN, output) {
output <- FUN(input)
return(input)
}
輸出在哪裏是要創建一個對象的不帶引號的名稱。
讓我們跳過這可能是一個壞主意的部分:這種事情可能嗎?你會怎麼做呢?
Clean代碼只會返回它。
但你還有其他選擇:
<<-
操作assign()
功能,你可以列出的環境中分配給下面是一個簡單的例子:
R> foo <- function(x=21) { y <<- 2*x; return(3*x) }
R> foo(10)
[1] 30
R> y
[1] 20
R>
1)試試這個:
fun <- function(input, FUN, output = "output", envir = parent.frame()) {
envir[[output]] <- FUN(input)
input
}
fun(4, sqrt)
## [1] 4
output
## [1] 2
注意,如果硬編碼輸出變量名output
是確定,然後分配可以寫成:
envir$output <- FUN(input)
2)如果你想輸出的另一種可能性均輸入和輸出,但避免副作用是返回一個列表中:
fun2 <- function(input, FUN, output = "output")
setNames(list(input, FUN(input)), c("input", output))
fun2(4, sqrt)
給出:
$input
[1] 4
$output
[1] 2
2A)這方面的一個變化是:
devtools::install_github("ggrothendieck/gsubfn")
library(gsubfn) # list[...] <- ...
list[input, output] <- fun2(sqrt)
給予:
> input
[1] 4
> output
[1] 2
3)又一種可能性是通過輸入中的一個屬性:
fun3 <- function(input, FUN) {
out <- FUN(input)
attr(out, "input") <- input
out
}
fun3(4, sqrt)
捐贈:
[1] 2
attr(,"input")
[1] 4
返回的對象將有你把它分配給了名字。它在函數中的名字是無關緊要的。 –
如果您需要可保留狀態的對象,請考慮使用參考類或R6類。 –