R 在一个环境中工作,等同于in()、attach()等?
我想向搜索路径添加一个环境,并在有限的代码块中修改该环境中变量的值,而无需在每次引用变量时指定环境的名称:例如,给定环境R 在一个环境中工作,等同于in()、attach()等?,r,closures,R,Closures,我想向搜索路径添加一个环境,并在有限的代码块中修改该环境中变量的值,而无需在每次引用变量时指定环境的名称:例如,给定环境 ee <- list2env(list(x=1,y=2)) 我能想到的大多数解决方案都是明确设计的,而不是修改环境的,例如 ?附加:“数据库实际上没有附加。而是一个新环境 是在搜索路径上创建的…” within():获取列表或数据帧(不是环境)“…并对“数据”的副本进行相应的修改” 由于@Nuclear03020704,有两个问题!我认为with()一直是我想要的;
ee <- list2env(list(x=1,y=2))
我能想到的大多数解决方案都是明确设计的,而不是修改环境的,例如
“数据库实际上没有附加。而是一个新环境 是在搜索路径上创建的…”?附加:
:获取列表或数据帧(不是环境)“…并对“数据”的副本进行相应的修改”within()
- 由于@Nuclear03020704,
有两个问题!我认为
一直是我想要的;我错误地假设它还将创建环境的本地副本,但它仅在with()
参数为而不是环境时才会这样做数据
这似乎是可行的,但也似乎很奇怪/神秘!我不想向使用R不到10年的人解释它。。。我想我可以在此基础上在_environment()中编写一个ee <- list2env(list(x=1,y=2)) with(ee, { x <- x+1 y <- y+2 z <- 6 })
,但我必须非常小心地正确捕获表达式,而不计算它…那么,
呢?从with()
with(数据、表达式)
是用于构建环境的数据。对于默认的with方法,它可以是环境、列表、数据帧或整数数据
是要计算的表达式expr
是一个通用函数,用于在由数据构造的本地环境中计算with
。环境将调用方的环境作为其父环境。这对于简化对建模函数的调用非常有用。(注意:如果expr
已经是一个环境,则该环境将与其现有父环境一起使用。) 请注意,data
中的分配发生在构造的环境中,而不是在用户的工作区中expr
返回计算的with()
的值expr
ee捕获环境并没有那么棘手,是吗?例如,我认为在_环境中
,但我认为这不会通过CRAN检查。当包代码使用非标准求值时,这些检查似乎不喜欢它。我猜这应该是一个用户专用的便利。公式中未明确定义的符号通常会导致问题。但是我很好奇是否有人知道反例。
应该会处理这个问题(尽管Martin Maechler不喜欢它,更喜欢globalVariables()
x
?上面说,和()
可以把环境作为它的论据吗?不过我真的不知道你在做什么,所以如果这与你想要的还不接近,我很抱歉。你可能是对的!@Nuclear03020704,如果你想把它作为一个答案,我会接受的。with
in_environment(ee, { x <- x+1 y <- y+2 z <- 6 })
clfun <- function() { x <- 1 y <- 2 function(...) { x <<- x + 1 y <<- y * 2 } } myfun <- clfun()
ee <- list2env(list(x=1,y=2)) with(ee, { x <- x+1 y <- y+2 z <- 6 })
myfun <- function() { eval(quote( { x <- x+1 y <- y*2 z <- 3 }), envir=ee) }
ee <- list2env(list(x=1,y=2)) with(ee, { x <- x+1 y <- y+2 z <- 6 })