屏蔽现有对象时如何从函数分配给全局变量?

我有这样的功能:

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

,但报告错误“ myfun()中的错误:无法更改'df'的锁定绑定的值”。我确实需要修改全局变量df,而且我不在乎是否屏蔽现有函数。我该怎么办?

我发现了这个解决方案。它可以工作,但有没有那么复杂的东西?

myfun <- function ()
{
    df <- data.frame(a = 1)
    assign("df",df,envir = .GlobalEnv)
}
myfun()
hf51963051 回答:屏蔽现有对象时如何从函数分配给全局变量?

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

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

# from some calling scope
mydf <- myfun()

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

,

@TimBiegeleisen的答案没有太多要添加;但是,为了响应您的帖子和看到的错误,您需要在函数范围之外声明df

以下作品

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

但是请注意,这不是应该使用<<-的方式,请参见Dirk Eddelbuettel's answer to "What is the difference between assign and <<- in R"。总结一下:

  • 您可以使用 <<-在父(而不是全局)环境(具有词法作用域的“超级分配”)中更新对象,反之亦然
  • 请勿使用 <<-在全局环境中更新对象。
本文链接:https://www.f2er.com/3162938.html

大家都在问