在下面的简化示例中 当我要求变量" var"的值时只写" var" 我一无所获。我必须使用打印功能 为了这个工作。 请有人向我解释这种行为。 大家先谢谢你们。
Foo <- function(){
var <- 1
var # it does nothing
print(var) # 1
}
Foo()
如果我们只是写出任何函数,它就可以正常工作:
var <- 2
var # 2
print(var) # 2
答案 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)
}
除非它被传回到顶部。