首页 > 解决方案 > 屏蔽现有对象时如何从函数分配给全局变量?

问题描述

我有这样的功能:

myfun <- function ()
{
    df <<- data.frame(a = 1)
}
myfun()

但它报告错误“myfun() 中的错误:无法更改 'df' 的锁定绑定值”。我真的需要修改全局变量 df 并且我不在乎是否屏蔽现有函数。我怎样才能做到这一点?

我发现了这个解决方案。它可以工作,但是有什么不那么复杂的吗?

myfun <- function ()
{
    df <- data.frame(a = 1)
    assign("df", df, envir = .GlobalEnv)
}
myfun()

标签: r

解决方案


这里最好的解决方案是完全避免处理函数内部的变量范围。如果要创建一个可用于分配数据框变量的函数,则只需让该函数返回数据框:

myfun <- function() {
    df <- data.frame(a = 1)
    return(df)
}

# from some calling scope
mydf <- myfun()

如果您希望在某个范围内分配数据框,则让该范围进行分配,而不是让函数执行此操作。


推荐阅读