这个问题仅出于好奇。我和我的同事正在尝试编写一个返回NULL
但不打印它的函数。
在找到return(invisible(NULL))
之前,我尝试了return({dummy<-NULL})
可行,但是只有一次。第一次评估后,功能将再次开始打印:
test <- function() {
return({x<-NULL})
}
# no printout
test()
# with printout
test()
# with printout
test()
这是怎么发生的?
答案 0 :(得分:1)
我认为这是由于R中内置了一些较旧的返回处理所致。返回函数很多,withVisible
,invisible
等。在返回中返回赋值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)