R函数没有返回值

Tay*_*lor 9 r function

我用他的一些代码帮助了我的一个朋友.我不知道如何解释这种奇怪的行为,但我可以告诉他,他的功能并没有明确地返回任何东西.这是一个可重复的最小例子:

derp <- function(arg){
  arg <- arg+3
}

data <- derp(500)
data
#[1] 503
derp(500)
#nothing outputs
class(derp(500))
#[1] "numeric"
Run Code Online (Sandbox Code Playgroud)

有这个名字我可以google吗?为什么会这样?为什么在调用derp()之后arg没有被销毁?

Hon*_*Ooi 11

您需要了解返回值的函数与打印该值之间的区别.默认情况下,函数返回最后计算的表达式的值,在本例中为赋值

arg <- arg + 3
Run Code Online (Sandbox Code Playgroud)

(注意,在R中,赋值是一个返回值的表达式,在本例中是赋值.)这就是为什么data <- derp(500)导致data包含503的原因.

但是,默认情况下,返回的值不会打印到屏幕上,除非您将函数的最终表达式隔离在自己的行上.这是R中的一个怪癖.所以如果你想看到这个值:

derp <- function(arg)
{
    arg <- arg + 3
    arg
}
Run Code Online (Sandbox Code Playgroud)

要不就

derp <- function(arg)
arg + 3
Run Code Online (Sandbox Code Playgroud)

  • 我不同意你的陈述"默认情况下,返回的值不会打印到屏幕上".它默认打印.问题是赋值将可见性设置为FALSE,以便不显示.这就是为什么当你做"a < - 3"时你也看不到"3"也被打印出来的原因.检查`withVisible(3)`与`withVisible(a < - 3)`相比较 (6认同)
  • @Dason甚至`a &lt;-3` vs`(a &lt;-3)` (3认同)
  • @Dason ......"除非你将函数的最终表达式隔离在自己的行上" (2认同)