R从预定义函数中获取元素

时间:2013-11-22 13:34:52

标签: r subset

我正在运行一个带有预定义函数的脚本,该函数在给出所需的最终结果之前计算了几个副产品。现在我想通过产品'grep'一些产品,因为我需要它们进行进一步的计算。

我认为正常的做法是将函数f中的元素(比方说,t)称为f $ t。但是,如果我确实得到类型为closure的错误对象不是subsetable。有没有办法从函数中提取出来?

谢谢

2 个答案:

答案 0 :(得分:1)

您无法访问函数中的局部变量,但可以根据需要返回它们。

例如,如果你有:

myfunct <- function(x, y)
      {
      val1 <- x + y
      val2 <- x - y
      result <- val1 * val2

      return(result)
      }

您唯一可以访问的是最终结果。 如果您想要访问val1val2,可以执行以下操作:

myfunct <- function(x, y)
      {
      val1 <- x + y
      val2 <- x - y
      result <- val1 * val2

      return(list(res=result, valsum=val1, valdiff=val2))
      }

您现在可以:

test <- myfunct(10, 20)
print(test$valsum)
print(test$valdiff)
print(test$res)

答案 1 :(得分:0)

有一种更好的方法可以将函数的局部变量输出到全局环境中。 R提供了一个特殊的赋值运算符,在这里派上用场。

  

myfunct&lt; - function(x,y)         {

  val1 <<- x + y
  val2 <<- x - y
  result <- val1 * val2

  return(result)
  }

请注意赋值运算符中的额外字符。这样做的是变量val1和val2在全局环境中分配,同时您可以使用它来计算结果。你只需从函数返回结果。你可以继续在全球环境中玩val1和val2。

在几条评论之后编辑:我同意一般来说这不是一个好的功能。但你必须了解问题的要求。我的理解是有一个预先编写的功能正在使用已经有一个表格。现在在这种情况下很多时候你想要调试函数而不想改变函数的形式。

因此,如果你想要输出一个内部变量,那么在不触及函数返回的内容的情况下,R的这个特性非常方便。但我同意,在您关闭当天的R之前,请确保已删除此运营商的所有实例。