【问题标题】:Get variables that have been created inside a function获取已在函数内部创建的变量
【发布时间】:2013-08-08 10:39:04
【问题描述】:

我创建了一个保存在 .txt 文件中的函数(很长)。 它运行良好(我使用 source() 来访问它)。 我的问题是我在该函数中创建了一些变量 即:

myfun<-function(a,b) {
Var1=....
Var2=Var1 + ..
}

现在我想获取这些变量。 当我在函数中包含return() 时,它很好:值出现在屏幕上,但是当我在函数中键入 Var1 outside 时,我收到一条错误消息“找不到对象”。 我是 R 新手,但我想这可能是因为“myfun”在与全球环境不同的环境中运行,但当我这样做时

environment()
environment: R_GlobalEnv>
environment(myfun1)
environment: R_GlobalEnv>

在我看来问题出在其他地方......

有什么想法吗?

谢谢

【问题讨论】:

  • return 不是 assign 你的 var1 对象,你需要自己做。例如。如果 myfun returns 一个名为 var1 的函数内部对象,则需要执行 var1 &lt;- myfun(a,b) 以将其保存到全局环境中。
  • 另外,如果你想返回多个函数,你可以返回一个列表return(list(var1=var1,var2=var2))。当调用这个例如var1 &lt;- myfun(a,b) 那么这两个变量将是 var1$var1 和 var1$var2。

标签: r function variables extract


【解决方案1】:

我知道这个答案已经超过 3 年了,但我相信您正在寻找的选项如下:

myfun <- function(a,b) {
  Var1 = (a + b) / 2   # do whatever logic you have to do here...
  Var2 <<- Var1 + a    # then output result to Global Environment with the "<<-" object.  
}

双“

【讨论】:

    【解决方案2】:

    如果你想以一种好的方式做到这一点,请编写一个类,而不是提供一个打印方法。在此类中,可以返回不可见的变量。一本涵盖此类主题的好书是"The Art of R programming"

    一个简单的解决方法是将您稍后需要的每个变量保存在一个列表中,然后返回一个列表 (正如彼得指出的那样):

    return(list(VAR1=VAR1, .....))
    

    【讨论】:

    • 感谢您的回答。但是,它仍然不起作用。。也许我误解了你的答案,但我编辑了我的文本文件,并在函数中添加了以下行:LISTE
    • 好的,它现在可以工作了,我想我对列表中的“插槽”这个概念并不是很熟悉。谢谢!
    猜你喜欢
    • 2021-03-25
    • 2010-09-12
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    相关资源
    最近更新 更多