我想在循环中创建包含我的函数,但我没有被评估。分配函数时递增?
例如,环:
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