【发布时间】:2015-05-05 08:28:44
【问题描述】:
我有一个函数:
myfunctionIs=myfunct(x,y){
#Some calculations and assign my lists to globalenv
theList1<<-theList1
theList2<<-theList2
#Nested function
function(...){
theList1=get("theList1")
theList2=get("theList2")
##Some calculations...
#NamesList calculation
NamesList= ###Some Calculations
ListContainer=c(deparse(substitute(theList1)),deparse(substitute(theList2)))
for (i in seq_along(ListContainer)){
assign(ListContainer[i],mapply(function(x,y) {
##Some calculations
return(x)
},x=get(ListContainer[i],envir=parent.env(environment())),y=NamesList,SIMPLIFY = FALSE),
envir=.GlobalEnv)
}
}}
我正在尝试将 theList1 和 theList2 分配回 .GlobalEnv,但出现错误
Error in get(ListContainer[i], envir = parent.env(environment())) :
object 'structure(list("2002-12-31" = structure(list(Date = c("2000-01-31", ' not found
我相信错误来自于
get(ListContainer[i],envir=parent.env(environment()))
因为calculations work correctly if I work in GlobalEnvironment。
有什么想法吗? 最好的问候
EDIT
这样可行:
将ListContainer 更改为:
ListContainer=c("theList1","theList2")
函数内部的deparse(substitute... 有问题。
【问题讨论】:
-
你真正想做什么?这段代码相当混乱。我可以向您保证,几乎可以肯定没有必要使用
<<-和assign,而且我(几乎)从不使用它们。与其将对象分配给 globalEnv,不如将所有对象放在一个列表中并使用它? -
@Andrie 代码乱七八糟有一些原因,但这不是这里的问题;)如果你不使用它,我为什么不使用它??
-
我不使用它,因为可能有更简单的方法。您要求“任何想法”。我有很多想法,但如果你能描述一下你真正想做的事情,它会很有帮助。
-
@Andrie 我正在尝试将 ListContainer(已修改 theList1 和 theList2)分配给全局环境。在内部函数中不起作用,但在我在 GlobalEnv 中工作时起作用。另一种解决方案是修改 theList1 和 theList2 并在子函数中分配。
-
我无法复制您的错误。请把它变成一个最小的、可重现的例子。
标签: r get environment assign