【问题标题】:Assign to .GlobalEnv with assign用 assign 分配给 .GlobalEnv
【发布时间】: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... 有问题。

【问题讨论】:

  • 你真正想做什么?这段代码相当混乱。我可以向您保证,几乎可以肯定没有必要使用&lt;&lt;-assign,而且我(几乎)从不使用它们。与其将对象分配给 globalEnv,不如将所有对象放在一个列表中并使用它?
  • @Andrie 代码乱七八糟有一些原因,但这不是这里的问题;)如果你不使用它,我为什么不使用它??
  • 我不使用它,因为可能有更简单的方法。您要求“任何想法”。我有很多想法,但如果你能描述一下你真正想做的事情,它会很有帮助。
  • @Andrie 我正在尝试将 ListContainer(已修改 theList1 和 theList2)分配给全局环境。在内部函数中不起作用,但在我在 GlobalEnv 中工作时起作用。另一种解决方案是修改 theList1 和 theList2 并在子函数中分配。
  • 我无法复制您的错误。请把它变成一个最小的、可重现的例子。

标签: r get environment assign


【解决方案1】:

可行:将 ListContainer 更改为:

ListContainer=c("theList1","theList2")

deparse(substitute(..)) 部分有问题。

或者也许这也可以通过一些调整来工作:

ListContainer=c(quote(theList1),quote(theList2))

然后

eval(ListContainer[i])

在循环中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2015-04-08
    • 2016-10-21
    相关资源
    最近更新 更多