【问题标题】:Returning and accessing objects from functions in R从 R 中的函数返回和访问对象
【发布时间】:2016-05-23 21:31:36
【问题描述】:

我在 R 中编写了一个函数,它返回一个由两个变量组成的列表。该函数可以正常工作,因为返回了正确的值。但是,问题是我无法访问该列表以进行进一步处理。代码是这样的:

grinder <- function(x) {

if(x == "BID") {
miles <- 18.4 * n.row
tolls <- 1.8 * n.row

} else if(x == "SPR") {
miles <- 10.8 * n.row
tolls <- 0

} else if (x == "BRI") {
miles <- 3.8 * n.row
tolls <- 0

} else if (x == "GOO") {
miles <- 66.2 * n.row
tolls <- 1.8 * n.row

} else if (x == "MIL") {
miles <- 108
tolls <- 0

} else if (x == "SMH") {
miles <- 94.6 * n.row
tolls <- 2 * n.row

}

mil.tol <- list(miles,tolls)
return(mil.tol)

}

grinder(x)

返回了正确的值,但我无法访问 mil.tol 来对这些值执行任何操作。我也无法获得正确的里程或通行费值。控制台返回:

> mil.tol
Error: object 'mil.tol' not found
> miles

有什么建议吗?

【问题讨论】:

  • mil.tol
  • 您应该期望 grinder 像任何普通的 R 函数一样工作。这意味着它不仅为您“创建”对象,您还将结果分配给一个对象。如果您运行一个线性模型lm(mpg ~ wt, data = mtcars),如果它在您的工作空间中创建了一个名为“模型”的对象,那将是可怕 - 您一次不能使用多个模型。就像您习惯于命名和分配模型 mod1 &lt;- lm(...) 一样,您需要命名和分配函数的输出:mil.tol &lt;- grinder(x)

标签: r function variables


【解决方案1】:

milestollsmil.tol 都是函数本地的,不会返回,但您可以将函数的输出(即来自 return())分配给 mil.tol:

mil.tol <- grinder(x)

还建议阅读这篇 SO 帖子 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2017-06-16
    • 1970-01-01
    • 2012-02-29
    • 2016-03-17
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多