首页 > 解决方案 > 在 R 中使用 deparse 进行强制评估

问题描述

我有一个产生函数的函数:

fun1 <- function (x)
    return (function() x)

到生成函数时, 的值x已经基本上是一个常数:

fun2 <- fun1 ("a")

但是,当我fun2打印时,它不会显示实际值,它只会显示,"x"即使它现在已经过时:

> fun2
function() x
<environment: 0x55a9f94f9fc8>

如何强制评估x以便fun2打印为

function() "a"

还是它是生产出来的?

标签: rlazy-evaluationfirst-class-functions

解决方案


没有必要求助于deparse这里。您可以将 x 的评估值写入新创建的函数的主体中:

fun1 <- function (x){
  f <- function() x
  body(f) <- x
  f
}

以便:

fun1("a")
#> function () 
#> "a"
#> <environment: 0x00000146d0449dd8>

f <- fun1("a")
f()
#> [1] "a"

编辑

如果你想f争论,你可以这样做:

fun1 <- function (x){
  f <- function(y) y + x
  body(f)[[3]] <- x
  f
}

以便

fun1(3)
#> function (y) 
#> y + 3
#> <environment: 0x00000146d4b702a0>

推荐阅读