从R函数中检索/访问动态变量

时间:2014-11-24 21:43:20

标签: r function

我在R中有一个构建原始数据的函数。我创建了一个名为output的数据框,然后根据函数值block创建一个动态变量名。

输出对象确实包含我想要的数据帧,并且在函数结束时动态地重命名它(在函数内):

a = assign(paste("output", block, sep=""), output)

...但是在运行该函数后,没有对象output1(如果block = 1)。我根本无法检索输出对象,既不是output也不是动态output1版本。

我试过这个:

a = assign(粘贴(“输出”,块,sep =“”),输出)    返回(a)中

......但仍然 - 没有成功。 如何检索动态输出变量?我的错误在哪里?

1 个答案:

答案 0 :(得分:4)

环境。

默认情况下,

assign会在其调用的环境中创建变量。在此处阅读有关环境的信息:http://adv-r.had.co.nz/Environments.html

我假设您正在做类似的事情:

foo <- function(x){ assign("b", x); b}

如果您运行foo(5),您会看到它按预期返回5(暗示b已在某处成功创建),但b不存在你当前的环境。

但是,如果你做这样的事情

foo <- function(x){ assign("b", x, envir=parent.frame()); b}

此处,您在调用assign时恰好分配给当前环境(恰好是foo的环境)。相反,您将分配到父环境(由于您直接调用此功能,将成为您的环境)。

所有这些复杂性都应该告诉你,这将是相当复杂的,维护的噩梦,从维护的角度来看是一个非常糟糕的主意。你可以通过以下方式获得更好的效果:

foo <- function(x) { return(x) };
b <- foo(5)

或者如果您需要退回多件物品:

foo <- function(x) { return(list(df=data.frame(col1=x), b=x)) }
results <- foo(5)
df <- results$df
b <- results$b

但我们的不是为什么......