eval inside gsubfn inside sub function: 找不到对象
eval inside gsubfn inside sub function: object not found
给出两个函数
subfun <- function(txt)
gsubfn::gsubfn("§([^§]+)§", ~eval(parse(text=x)), txt)
topfun <- function(id = 1L)
subfun("Hello §id§ world!")
以下 (1.) 应该产生 "Hello 1 world!"
但会抛出错误:
topfun()
# Error in eval(expr, envir, enclos) : object 'id' not found
这两个 (2.) & (3.) 按预期工作:
id <- 2L
topfun()
# [1] "Hello 2 world!"
topfun2 <- function(id = 1L)
gsubfn::gsubfn("§([^§]+)§", ~eval(parse(text=x)), "Hello §id§ world!")
topfun2()
# [1] "Hello 1 world!"
我怎样才能使 (1.) 工作?
我用 eval
和 gsubfn
的 envir
参数尝试了几个 environment()
和 parent.frame()
变体,包括传递 topfun
的通过省略号参数将环境设置为 subfun
。一切都没有成功。 (并不是说我对幕后发生的事情有更多的了解。但我本以为 R 会在一个又一个父环境中寻找 id
...)
我正在使用 R version 3.3.0
和 gsubfn
包版本 0.6.6
。
提前致谢!
我不是这方面的专家,但问题似乎是在 gsubfun
中使用公式 replacement
。至少我无法将环境传递给 eval
如果它在公式中。
subfun_2 <- function(txt){
ev <- parent.frame() # the environment in which subfun_2 was called
gsubfn::gsubfn("§([^§]+)§", ~eval(parse(text=x), envir = ev), txt)
}
topfun_2 <- function(id = 1L) subfun_2("Hello §id§ world!")
topfun_2()
# Error in eval(parse(text = x), envir = ev) :
# argument "ev" is missing, with no default
如果您改用函数,它会按预期工作:
subfun_3 <- function(txt){
ev <- parent.frame()
gsubfn::gsubfn("§([^§]+)§", function(x)eval(parse(text=x), envir = ev), txt)
}
topfun_3 <- function(id = 1L) subfun_3("Hello §id§ world!")
topfun_3()
# Hello 1 world!
给出两个函数
subfun <- function(txt)
gsubfn::gsubfn("§([^§]+)§", ~eval(parse(text=x)), txt)
topfun <- function(id = 1L)
subfun("Hello §id§ world!")
以下 (1.) 应该产生 "Hello 1 world!"
但会抛出错误:
topfun()
# Error in eval(expr, envir, enclos) : object 'id' not found
这两个 (2.) & (3.) 按预期工作:
id <- 2L
topfun()
# [1] "Hello 2 world!"
topfun2 <- function(id = 1L)
gsubfn::gsubfn("§([^§]+)§", ~eval(parse(text=x)), "Hello §id§ world!")
topfun2()
# [1] "Hello 1 world!"
我怎样才能使 (1.) 工作?
我用 eval
和 gsubfn
的 envir
参数尝试了几个 environment()
和 parent.frame()
变体,包括传递 topfun
的通过省略号参数将环境设置为 subfun
。一切都没有成功。 (并不是说我对幕后发生的事情有更多的了解。但我本以为 R 会在一个又一个父环境中寻找 id
...)
我正在使用 R version 3.3.0
和 gsubfn
包版本 0.6.6
。
提前致谢!
我不是这方面的专家,但问题似乎是在 gsubfun
中使用公式 replacement
。至少我无法将环境传递给 eval
如果它在公式中。
subfun_2 <- function(txt){
ev <- parent.frame() # the environment in which subfun_2 was called
gsubfn::gsubfn("§([^§]+)§", ~eval(parse(text=x), envir = ev), txt)
}
topfun_2 <- function(id = 1L) subfun_2("Hello §id§ world!")
topfun_2()
# Error in eval(parse(text = x), envir = ev) :
# argument "ev" is missing, with no default
如果您改用函数,它会按预期工作:
subfun_3 <- function(txt){
ev <- parent.frame()
gsubfn::gsubfn("§([^§]+)§", function(x)eval(parse(text=x), envir = ev), txt)
}
topfun_3 <- function(id = 1L) subfun_3("Hello §id§ world!")
topfun_3()
# Hello 1 world!