【问题标题】:Return result from function in R从 R 中的函数返回结果
【发布时间】:2013-01-05 13:13:45
【问题描述】:

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

所以给定我的数据:

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

我创建了一个向量来存储我的结果和一个带有一些函数的循环

    result <- vector("list",10)

    for (i in 1:10)
    {
      result[[i]] <- df1*i
    }

当我尝试创建这样的函数时

    # 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”中没有得到任何数据。所以我认为语法存在一些基本问题。谁能帮帮我?

【问题讨论】:

  • +1 这个有趣的问题!经典的初学者陷阱!

标签: r function loops syntax


【解决方案1】:

您的函数不会返回它创建的列表。你需要添加一个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
}

顺便说一句:这个函数的一个更短的版本可以用lapply创建:

myfun <- function(x, a = 1, b) {
    lapply(seq(a, b), "*", x)   
}

【讨论】:

  • 一旦你担心性能,在你的输出对象周围放置result() 可以让你的代码更快一点。只是我的两分钱。
  • 比你想象的还要简单:as.list(x * a:b).
  • 它们对于标量参数是相同的。而对于矢量xx %o% a:b 是一个不错的选择。
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2016-06-10
相关资源
最近更新 更多