我想在循環中創建包含我的函數,但我沒有被評估。分配函數時遞增?
例如,環:
func <- list(0)
for (i in 1:3) {
func[[i]] <- function(x) i*x
}
生產:
> func[[1]]
function(x) i * x
<bytecode: 0x0000000011316b08>
當我真正需要1 * X 2 * X,3 * X
我想在循環中創建包含我的函數,但我沒有被評估。分配函數時遞增?
例如,環:
func <- list(0)
for (i in 1:3) {
func[[i]] <- function(x) i*x
}
生產:
> func[[1]]
function(x) i * x
<bytecode: 0x0000000011316b08>
當我真正需要1 * X 2 * X,3 * X
寫一個返回功能一個函數。請務必使用force()
來強制評估延遲參數。
func <- list(0)
makefun <- function(i) {
force(i)
function(x) i*x
}
func <- Map(makefun, 1:3)
func[[1]](5)
# [1] 5
func[[2]](5)
# [1] 10
func[[3]](5)
# [1] 15
您可以在local()
的幫助下在for循環中執行此操作。
func <- list(0)
for (i in 1:3) {
func[[i]] <- local({i<-i; function(x) i*x})
}
在這兩種情況下的定義仍像"function(x) i*x"
但其中i
值是來自環境是不同的。
的問題是,你的功能是指i
,但只有一個i
.MrFlick的回答是迫使當地環境的方法來創建舉行的i
有着不同的價值觀不同的副本有;另一種是使用local()
,例如,
func <- list()
for (i in 1:3) {
func[[i]] <- local(
{
j <- i # make a local copy of the current value
function(x) j*x
})
}
func[[1]](5)
# [1] 5
func[[2]](5)
# [1] 10
func[[3]](5)
# [1] 15
什麼是'x'?你想要一個字符串的值嗎? – www