R:返回NULL时函数更改打印行为

时间:2018-11-08 10:12:16

标签: r printing null return-value

这个问题仅出于好奇。我和我的同事正在尝试编写一个返回NULL但不打印它的函数。

在找到return(invisible(NULL))之前,我尝试了return({dummy<-NULL})可行,但是只有一次。第一次评估后,功能将再次开始打印:

test <- function() {
  return({x<-NULL})
}
# no printout
test()
# with printout
test()
# with printout
test()

这是怎么发生的?

1 个答案:

答案 0 :(得分:1)

我认为这是由于R中内置了一些较旧的返回处理所致。返回函数很多,withVisibleinvisible等。在返回中返回赋值x<-null时功能,它将不会自动打印。如果您要打印作业...

test <- function() {
  withAutoprint(x<-NULL)
}
# with printout this time
test()
# with printout
test()
# with printout
test()

我认为这可能被硬编码到返回函数中,也许从下面的逻辑中提取了一些东西,尽管只是黑暗中的一幕。

Source: R Documentation

x <- 1
withVisible(x <- 1) # *$visible is FALSE
x
withVisible(x)      # *$visible is TRUE

同样,如果我们不使用表达式,而只是在返回函数中返回变量或值,我们将自动打印。我猜它第二次调用返回的原因与x先前已分配的事实有关。

编辑:我在自动打印文档中发现了这一点。 “是否打印顶级R表达式的返回值是由全局布尔变量R_Visible控制的。在输入所有基本函数和内部函数时,将根据布尔值R_Visible对其进行设置(为true或false)。 src / main / names.c文件中的表格:可以通过宏PRIMPRINT提取适当的设置。“ Source