强制R对函数中的变量求值

强制R对函数中的变量求值,r,R,假设在R中有一个数字向量(nums),并且希望使用这些数字中的每一个生成一个函数,如下所示: k = 1 for (i in nums){ assign(paste("fun_",k, sep = ""), function(x) rnorm(x,i,1)) k=k+1 } function(x) rnorm(x,i,1) 但是,当代码运行时,所有函数的定义如下: k = 1 for (i in nums){ assign(paste("fun_",k, sep = ""), f

假设在R中有一个数字向量(nums),并且希望使用这些数字中的每一个生成一个函数,如下所示:

k = 1
for (i in nums){
  assign(paste("fun_",k, sep = ""), function(x) rnorm(x,i,1))
  k=k+1
}
function(x) rnorm(x,i,1)
但是,当代码运行时,所有函数的定义如下:

k = 1
for (i in nums){
  assign(paste("fun_",k, sep = ""), function(x) rnorm(x,i,1))
  k=k+1
}
function(x) rnorm(x,i,1)
这意味着它们都将使用当前的全局值i,而不是循环中给定给它们的实际数字。在函数的定义中,是否存在强制函数使用数值而不是使用变量i的方法


谢谢

你为什么要这么做?你所有的功能都完全一样。请不要使用assign,更不用说它完全按照您的指示执行。我不知道你为什么这么惊讶大卫,我想我解释得不对。假设nums是c(1,2,3,4,5),我想创建如下5个函数:fun_1=函数(x)rnorm(x,1,1),fun_2=函数(x)rnorm(x,2,1),fun_3=函数(x)rnorm(x,3,1)等等。赋值有什么问题吗?同样,为什么要这样做?只需创建一个名为fun的函数,该函数将接受nums作为参数,例如f
unsolved,感谢您没有帮助建议替代方法是有帮助的(在我看来)。我仍然认为您在这里做了一件错误的事情,您不应该创建多个函数或使用
assign
。你所做的被称为“XY问题”