从R中的函数返回结果

从R中的函数返回结果,r,function,loops,syntax,R,Function,Loops,Syntax,我在尝试创建一个在R中包含循环的函数时遇到了一些麻烦。循环工作正常,但当我将其放入函数体中时,它将不再写入任何输出 因此,根据我的数据: df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10)) df1函数不会返回它创建的列表。您需要添加一个return命令: result2 <- vector("list",10) loop.function<- function(x,a,b)

我在尝试创建一个在R中包含循环的函数时遇到了一些麻烦。循环工作正常,但当我将其放入函数体中时,它将不再写入任何输出

因此,根据我的数据:

    df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10))

df1函数不会返回它创建的列表。您需要添加一个
return
命令:

result2 <- vector("list",10)

loop.function<-
  function(x,a,b){
    for (i in a:b)
  {
    result2[[i]] <- x*i
  }
  return(result2) # added this row
}

一旦您担心性能,在输出对象周围放置
result()
可能会使您的代码更快一些。就我的两分钱。这比你想象的还要简单:
as.list(x*a:b)
。它们对于标量参数是一样的。对于向量
x
x%o%a:b
是一个很好的选择。对于这个有趣的问题+1!经典的初学者陷阱!
    # make the loop a function
    result2 <- vector("list",10)

    loop.function<-
      function(x,a,b){
        for (i in a:b)
      {
        result2[[i]] <- x*i
      }
    }
    loop.function(df1,1,10)
result2 <- vector("list",10)

loop.function<-
  function(x,a,b){
    for (i in a:b)
  {
    result2[[i]] <- x*i
  }
  return(result2) # added this row
}
myfun <- function(x, a = 1, b) {
    lapply(seq(a, b), "*", x)   
}