我正在更改用户定义函数中的全局数据框。数据框是在函数外部创建的。
但是,我对数据框的更改在函数外部不可见。只有当我使用返回选项时,我才会得到数据帧。
有没有办法改变这个?
答案 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;