相关疑难解决方法(0)

再次:在函数内设置环境

关于范围,环境和功能的讨论已经很多.参见此处此处.但是,我不确定我是否找到了解决以下问题的好方法:

 df <- data.frame(id=rep(LETTERS[1:2],each=2), x=1:4)
 d <- -1
 myfun <- function(df, d){
          require(plyr)
          new.dat <- ddply(df, .(id), transform, x=x*d) 
          return(new.dat)}
 myfun(df, 1)
Run Code Online (Sandbox Code Playgroud)

您可以轻松验证是否使用了全局定义d=-1,而不是d=1参数中提供的内容.(如果不d存在全局定义,则object not found返回消息)现在最大的问题是:如何d使用所使用的函数而不是全局定义的参数d

我的印象是以下应该有效:

      myfun2 <- function(df, d){
          here <- environment()
          new.dat <- ddply(df, .(id), transform, x=x*with(here,d)) 
          return(new.dat)}
      myfun2(df, 1)
Run Code Online (Sandbox Code Playgroud)

我的理解是从环境中with(here, d)检索对象.所以,结果应该是.但是,返回错误,说dhere1

  Error in eval(substitute(expr), data, enclos = parent.frame()) : 
   invalid 'envir' argument of type 'closure' 
Run Code Online (Sandbox Code Playgroud)

我不确定我理解为什么这不起作用,如果有人能够对此有所了解,或者如果你能提供替代解决方案,我会很高兴.请注意,将整个 …

environment r function plyr

6
推荐指数
1
解决办法
5860
查看次数

使用功能和环境

这里在最近的讨论(如1,2)我现在用在我的一些代码的环境.我的问题是,如何根据参数创建修改环境的函数?例如:

y <- new.env()
with(y, x <- 1)
f <- function(env,z) {
    with(env, x+z)
}
f(y,z=1)
Run Code Online (Sandbox Code Playgroud)

Error in eval(expr, envir, enclos) : object 'z' not found
Run Code Online (Sandbox Code Playgroud)

我正在使用环境来同时保持两组模拟(没有重构我的代码,我为一组实验编写了代码).

scope r

3
推荐指数
1
解决办法
3730
查看次数

标签 统计

r ×2

environment ×1

function ×1

plyr ×1

scope ×1