代码之家  ›  专栏  ›  技术社区  ›  djq

在r循环内计算变量

  •  3
  • djq  · 技术社区  · 16 年前

    我尝试使用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;其中i是21。

    我尝试使用eval()函数,结果只存储了x*eval(i)。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Yorgos    16 年前

    检查这个:

    # 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))
    
        }
    
        2
  •  6
  •   Collin    16 年前

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

    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)