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