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

R 当屏蔽现有对象时,如何从函数分配全局变量?,r,R,我有这样的功能: myfun <- function () { df <<- data.frame(a = 1) } myfun() myfun这里最好的解决方案是避免完全处理函数中变量的范围。如果要创建一个可用于分配数据帧变量的函数,则只需让该函数返回数据帧: myfun <- function() { df <- data.frame(a = 1) return(df) } # from some calling scope mydf

我有这样的功能:

myfun <- function ()
{
    df <<- data.frame(a = 1)
}
myfun()
myfun这里最好的解决方案是避免完全处理函数中变量的范围。如果要创建一个可用于分配数据帧变量的函数,则只需让该函数返回数据帧:

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

# from some calling scope
mydf <- myfun()

myfun对于@TimBiegeleisen的答案没有什么可补充的;但是,为了响应您的帖子和您看到的错误,您需要将
df
声明在函数范围之外

以下作品

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

df我知道这是可能的,我不是初学者;-)如果这是我的解决方案,我不会问:-)我的函数还返回许多其他变量。带有
attach(myfun())
的解决方案是不可接受的,因为它处于for循环中。通常,如果您需要一个R函数来接触并在其他范围内进行分配,它可能表示设计气味。你可能不需要这样做,那是理想主义的想法。遵循它意味着长而丑陋的代码,而不是简单优雅的代码。。。所以这就是为什么我特别要求分配一个全局变量,这不是一个解决方案。@TMS不,这是函数思维。Tim给出的例子“丑陋的代码”是怎样的?我认为它在语法上更清晰。底线是,您不应该使用
在全局环境中为变量赋值,如果在指定的
df
对象之前发现
df
对象,则该对象将以静默方式更新,调试可能会很痛苦
df <- data.frame()
myfun <- function () df <<- data.frame(a = 1)
myfun()
df
#  a
#1 1