0

当我有数据矩阵时

mI <- c(1:4, 2, 6, 9)
mJ <- c(4:1, 5, 0, 2)

和以下简单的回归函数

fLM <- function(mX, mY){
       lmXY <- lm(mY~mX)
       summary(lmXY)
       return(lmXY)
}

很明显,我想使用命令summary(lmXY) 在函数中打印回归的结果。但是使用 LM <- fLM(mI, mJ) 不会打印摘要输出,即使此命令包含在函数中。当我删除函数 fLM 中的 return(lmXY) 命令时,奇怪的是(至少对我而言)summary(lmXY) 被打印出来。有人可以解释为什么会这样吗?

当我使用函数在函数中建立 Bloomberg 连接时,会发生类似的事情

conn <- blpConnect()

在函数后面的几个命令中,我使用 blpDisconnect(conn) 断开与 Bloomberg 的连接。下一个命令返回检索到的数据。但是,虽然 blpConnect() 完美运行,但 blpDisconnect(conn) 命令被跳过。数据的返回完美执行。当我手动与彭博建立连接然后使用断开连接功能时没有问题。但不知何故,在包含 return 的函数中(我不确定这是否是原因,这只是一个观察)存在问题。有人知道为什么吗?

BB函数的全局代码:

fnBB <- function(){
        conn <- blpConnect()
        ...
        blpDisconnect(conn)
        return(mData)
} 

提前谢谢了。

4

2 回答 2

0

如果您在常规提示符下键入命令并且该命令未在某处分配输出,则 R 将调用print返回的值。但是在函数或循环内部不会发生这种自动打印(参见 FAQ 7.16)。因此,如果您想打印摘要信息,则只需调用该print函数。

请注意,这些summary函数通常不打印任何内容,它们返回一个由print.summary函数打印的摘要对象。当您删除return语句时,summary调用是函数中的最后一件事,因此返回值(摘要对象)是函数返回的内容。如果您在没有将结果分配给任何内容的情况下调用该函数,则自动打印开始。使用 return 语句,将返回 lmXY 对象,因此将打印该对象(但如果将其设置为不可见则不会打印)。

于 2013-09-27T15:27:27.433 回答
0

对象不会在函数中打印,除非:

  1. 您明确告诉函数打印它。
  2. 该对象是函数返回的对象。

你应该跑print(summary(lmXY))

f1 <- function() {1 ; 2}
f2 <- function() {print(1) ; 2}
f3 <- function() {print(1) ; return(2)} # identical to f2

f1() #prints 2
object = f1() #stores 2, prints nothing
object = f2() #stores 2, prints 1
f2() #prints 1 and 2
于 2013-09-27T15:27:33.770 回答