"打印"函数内部的行为

时间:2015-06-12 05:21:28

标签: r

在下面的简化示例中 当我要求变量" var"的值时只写" var" 我一无所获。我必须使用打印功能 为了这个工作。 请有人向我解释这种行为。 大家先谢谢你们。

Foo <- function(){
    var <- 1
    var         # it does nothing
    print(var)  # 1
}

Foo()

如果我们只是写出任何函数,它就可以正常工作:

var <- 2
var        # 2
print(var) # 2

1 个答案:

答案 0 :(得分:0)

我相信答案是R不打印函数内部发生的语句的结果,因为这可能会导致在运行其他人的代码时出现很多混乱。

你可能想做像

这样的事情
f <- function(x){
    na.fail(x)
    rowMeans(x)
}

其中na.fail是一个函数,如果x包含缺失值则停止执行,否则返回x。打印x很可能不是作者想要的或用户想要的,所以R开发人员可能认为最好要求函数的作者明确说明应该打印的内容。

你当然可以争辩说上面的例子只是编码不好而你应该这样做:

f <- function(x) rowMeans(na.fail(x))

尽管如此,R的默认行为可能是最具防御性的解决方案。

但是,如果函数返回最后一行的值

Foo <- function(){
    var <- 1

    print("var")
    var         # it doesn't show var

    print("print(var)")
    var         # It shows var
}

在R会话的顶层进行评估时会打印出来(即使没有打印!),即如果用户明确调用它

Foo()
[1] "var"
[1] "print(var)"
[1] 1

这是因为Foo()是它自己的声明,如果它存在于顶层上,则返回一个打印的值。如果它出现在函数内部,则它不会被打印。

f <- function(x){
    Foo()
    rowMeans(x)
}

除非它被传回到顶部。