返回R中的语法怪癖

时间:2018-01-12 06:20:26

标签: r syntax return

您可以在R中使用以下代码创建一个函数,省略return命令后的括号,但return语句的行为不符合预期,似乎什么都不做:

> func <- function(x) { return; print(x) }
> func(1)
[1] 1

包含括号的行为符合预期:

> func <- function(x) { return(); print(x)}
> func(1)
NULL

为什么呢?没有参数的return语句是否有用,如果没有,为什么它不会导致异常呢?

2 个答案:

答案 0 :(得分:2)

我或许可以提供一些见解。除了在R中合法地拥有一个没有参数的函数之外,在没有赋值,函数调用等的行上有一个变量也是合法的。考虑下面的代码片段:

x <- c(1,2,3)
x
print(x)
print

以下是该输出:

[1] 1 2 3
[1] 1 2 3
function (x, ...) 
UseMethod("print")
<bytecode: 0xbb87b8>
<environment: namespace:base>

换句话说,从控制台中,变量或函数的默认行为本身就是打印有关该变量或函数的信息。因此,在这种情况下显然存在已定义的行为,并且似乎该函数未被调用。这可能不太有意义,当这种情况发生在另一个函数中时,尽管看起来R似乎已经为此定义了行为。

答案 1 :(得分:1)

function(x) { return(); print(x) }调用return()作为函数。 function(x) { return; print(x) }引用return作为普通对象。这是区别。

return # Just show the function body.
## .Primitive("return")
return() # Actually call the function.
## Error: no function to return from, jumping to top level