将参数传递给使用替代的函数
Pass arguments to function which uses substitute
我想为 reprex 创建一个小包装器,将输入代码传递给 reprex::reprex()
。
由于 reprex 在其 x 参数上使用 substitute()
,我需要以某种方式转义它。
MWE
这是一个最小的工作示例,其中 internal_foo()
充当 reprex()
的代理。
预期的结果是对 internal_foo(...)
和 wrapper(...)
return 的调用具有相同的输出。
internal_foo <- function(x) {
res <- substitute(x)
res
}
# the expected output! ------
internal_foo({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
#> {
#> a <- 1:10
#> b <- rnorm(10)
#> plot(a, b)
#> }
wrapper <- function(x = NULL) {
# pass x to internal_foo in such a way that it has the same output as calling internal_foo directly
internal_foo(deparse(x))
}
wrapper({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
#> deparse(x)
# clearly not equal to the expected output ----
由于 Rs 的惰性求值,x
没有按照我的意图传递给 internal_foo()
。
我尝试过 eval、deparse 和 substitute,但找不到合适的组合。
更复杂的 reprex 示例
实际目标是这个 reprex 包装器。
wrapper2 <- function(x, input = NULL) {
reprex::reprex(x = x, input = input, venue = "r", html_preview = FALSE)
}
wrapper2({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
wrapper2
呈现 reprex 并将其复制到剪贴板但显示 Error in eval object x not found
.
你可以
wrapper2 <- function(..., input = NULL) {
reprex::reprex(...,
input = input,
venue = "r",
html_preview = FALSE)
}
wrapper2({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
#> i Rendering reprex...
#> √ Reprex output is on the clipboard.
输出:
a <- 1:10
b <- rnorm(10)
plot(a, b)
#' ![](agile-pike_reprex_files/figure-gfm/unnamed-chunk-2-1.png)
我想为 reprex 创建一个小包装器,将输入代码传递给 reprex::reprex()
。
由于 reprex 在其 x 参数上使用 substitute()
,我需要以某种方式转义它。
MWE
这是一个最小的工作示例,其中 internal_foo()
充当 reprex()
的代理。
预期的结果是对 internal_foo(...)
和 wrapper(...)
return 的调用具有相同的输出。
internal_foo <- function(x) {
res <- substitute(x)
res
}
# the expected output! ------
internal_foo({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
#> {
#> a <- 1:10
#> b <- rnorm(10)
#> plot(a, b)
#> }
wrapper <- function(x = NULL) {
# pass x to internal_foo in such a way that it has the same output as calling internal_foo directly
internal_foo(deparse(x))
}
wrapper({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
#> deparse(x)
# clearly not equal to the expected output ----
由于 Rs 的惰性求值,x
没有按照我的意图传递给 internal_foo()
。
我尝试过 eval、deparse 和 substitute,但找不到合适的组合。
更复杂的 reprex 示例
实际目标是这个 reprex 包装器。
wrapper2 <- function(x, input = NULL) {
reprex::reprex(x = x, input = input, venue = "r", html_preview = FALSE)
}
wrapper2({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
wrapper2
呈现 reprex 并将其复制到剪贴板但显示 Error in eval object x not found
.
你可以
wrapper2 <- function(..., input = NULL) {
reprex::reprex(...,
input = input,
venue = "r",
html_preview = FALSE)
}
wrapper2({
a <- 1:10
b <- rnorm(10)
plot(a, b)
})
#> i Rendering reprex...
#> √ Reprex output is on the clipboard.
输出:
a <- 1:10
b <- rnorm(10)
plot(a, b)
#' ![](agile-pike_reprex_files/figure-gfm/unnamed-chunk-2-1.png)