gpt4 book ai didi

r - R:将一个环境复制/移动到另一个环境

转载 作者:行者123 更新时间:2023-12-03 12:28:14 26 4
gpt4 key购买 nike

我想问一下是否可以一次将一个环境的所有对象复制/移动到另一个环境。例如:

f1 <- function() {
print(v1)
print(v2)
}

f2 <- function() {
v1 <- 1
v2 <- 2

# environment(f1)$v1 <- v1 # It works
# environment(f1)$v2 <- v2 # It works

environment(f1) <- environment(f2) # It does not work
}

f2()
f1()

提前TNX

最佳答案

您似乎至少可以做3件事:

  • 克隆环境(创建完全相同的副本)
  • 将一个环境的内容复制到另一环境
  • 共享相同的环境

  • 克隆:
    # Make the source env
    e1 <- new.env()
    e1$foo <- 1
    e1$.bar <- 2 # a hidden name
    ls(e1) # only shows "foo"

    # This will clone e1
    e2 <- as.environment(as.list(e1, all.names=TRUE))

    # Check it...
    identical(e1, e2) # FALSE
    e2$foo
    e2$.bar

    要复制内容,您可以执行@gsk显示的操作。但同样, all.names标志很有用:
    # e1 is source env, e2 is dest env
    for(n in ls(e1, all.names=TRUE)) assign(n, get(n, e1), e2)

    共享环境是@koshke所做的。这可能通常更有用。结果与创建本地函数的结果相同:
    f2 <- function() {
    v1 <- 1
    v2 <- 2

    # This local function has access to v1 and v2
    flocal <- function() {
    print(v1)
    print(v2)
    }

    return(flocal)
    }

    f1 <- f2()
    f1() # prints 1 and 2

    关于r - R:将一个环境复制/移动到另一个环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965577/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com