我在 R 中有一个函数来构造我的原始数据。我创建了一个名为的数据框output,然后想根据函数值创建一个动态变量名称block。
输出对象确实包含我想要的数据帧,并动态重命名它,在函数的末尾我这样做(在函数内):
a = assign(paste("output", block, sep=""), output)
Run Code Online (Sandbox Code Playgroud)
...但在运行该函数后没有对象 output1 (if block= 1)。我根本无法检索输出对象,无论是output动态output1版本还是动态版本。
我当时试过这个:
a =assign(paste("output", block, sep=""), output) return(a)
......但仍然 - 没有成功。如何检索动态输出变量?我的错误在哪里?
环境。
assign默认情况下,将在调用它的环境中创建一个变量。在此处阅读有关环境的信息:http : //adv-r.had.co.nz/Environments.html
我假设你正在做这样的事情:
foo <- function(x){ assign("b", x); b}
Run Code Online (Sandbox Code Playgroud)
如果您运行foo(5),您将看到它按预期返回 5(暗示b已在某处成功创建),但b在您当前的环境中不存在。
但是,如果你做这样的事情
foo <- function(x){ assign("b", x, envir=parent.frame()); b}
Run Code Online (Sandbox Code Playgroud)
在这里,您将 not 分配给assign调用时的当前环境(恰好是foo的环境)。相反,您正在分配到父环境(因为您直接调用此函数,因此将成为您的环境)。
所有这些复杂性都应该向您表明,这将是相当复杂的,维护的噩梦,从维护的角度来看,这是一个非常糟糕的主意。使用以下内容肯定会更好:
foo <- function(x) { return(x) };
b <- foo(5)
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要返回多个项目:
foo <- function(x) { return(list(df=data.frame(col1=x), b=x)) }
results <- foo(5)
df <- results$df
b <- results$b
Run Code Online (Sandbox Code Playgroud)
但我们的理由不是...
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |