评估R循环中的变量

时间:2010-02-11 19:27:19

标签: function r statistics for-loop

我正在尝试使用For循环迭代生成一些函数:

# Create a list to hold the functions
funcs <- list()
funcs[]

# loop through to define functions
for(i in 1:21){

    # Make function name
    funcName <- paste( 'func', i, sep = '' )

    # make function
    func = function(x){x * i}

    funcs[[funcName]] = func

    }

然而,由于i值未在每个函数中进行评估,因此它不能正常工作。我想尝试将函数定义为等于x * 1; x * 2;等等,但我最终得到的是一个x * i的函数;我21岁。

我尝试使用eval()函数,这只会导致存储x * eval(i)。

2 个答案:

答案 0 :(得分:6)

使用闭包(写函数的函数):

multiply <- function(i) {
  force(i)
  function(x) x * i
}

funcs <- list()
for(i in 1:21){
  funcName <- paste( 'func', i, sep = '' )
  funcs[[funcName]] = multiply(i)
}

# OR in one line, with lapply
funcs <- lapply(1:21, multiply)

答案 1 :(得分:2)

检查一下:

# Create a list to hold the functions
funcs <- list()
funcs[]

# loop through to define functions
for(i in 1:21){

    # Make function name
    funcName <- paste( 'func', i, sep = '' )

    # make function
    func = paste('function(x){x * ', i,'}',sep = '')

    funcs[[funcName]] = eval(parse(text=func))

    }