用户定义函数中的全局vs本地

时间:2017-12-13 18:17:53

标签: r dataframe

我正在更改用户定义函数中的全局数据框。数据框是在函数外部创建的。

但是,我对数据框的更改在函数外部不可见。只有当我使用返回选项时,我才会得到数据帧。

有没有办法改变这个?

1 个答案:

答案 0 :(得分:2)

是否做"通过引用打电话" R中的功能是一个问题(在评论中提到 - 通常答案是否定的)。

但是,您问是否可以这样做。答案是,您可以修改您函数的本地范围内的全局数据框。以下是您的操作方法:1)使用eval.parent()(将评估范围设置为调用范围,可能是全局范围)和2)substitute()(替换变量引用而不是摧毁一个并创造一个新的。)

以下是一个例子:

> attach(mtcars)
> my_cars <- mtcars[mpg,] #not sorted
> pointless_sort <- function() {
+     eval.parent(substitute(my_cars<-mtcars[order(mpg),]))
+ }
> pointless_sort()
> #here the global my_cars is ordered/sorted by mpg

要点:1)你可以做到; 2)良好的编程通常意味着这样做(但我们都很懒,想要一种方便的方法来分割代码)。现在你有了力量。

  

&#34;伟大的力量带来了巨大的责任。&#34;