2013-09-27 73 views
0

命令跳过当我有数据矩阵的R - 在功能

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) 
} 

显而易见的是,我要打印的回归在结果通过使用命令摘要(lmXY)功能。但是,使用LM < - FLM(MI,MJ)汇总输出不打印,即使被包括在函数此命令。奇怪的是(至少对我来说)当我删除函数fLM中的return(lmXY)命令时,打印摘要(lmXY)。有人能解释为什么发生这种情况吗当我建立在一个函数使用

conn <- blpConnect() 

几个命令以后在我使用blpDisconnect(康涅狄格州)从Bloomberg断开功能彭博连接发生

类似的话。下一个命令返回检索的数据。但是,虽然blpConnect()完美工作,但blpDisconnect(conn)命令会被跳过。数据的返回是完美的。当我手动建立与彭博社的连接,然后使用断开功能时,没有问题。但不知何故,在包含回报的职能中(我不确定这是否是原因,但仅仅是一种观察),这是一个问题。有人知道为什么吗?

全球BB功能的代码:

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

提前非常感谢。

+1

我认为这是如何一个函数只能返回一个对象。 'summary'的输出是你试图返回到被'return'覆盖的父环境的东西。如果你'猫(摘要文件=“somefile”)',你将看到的内容在文件中捕获(尽管有格式问题)。我不知道为什么会发生这种情况的实际原因,因此发表评论。 – TheComeOnMan

回答

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 
+1

忍者的好SenorO!为你幸运我的名字不是伊尼戈蒙托亚:-) –

+0

我会准备死亡,只是为了安全。 –

0

如果在常规提示符下键入命令和命令不分配输出地方,那么R将呼吁返回的值print。但是在一个函数或循环中,这种自动打印不会发生(参见FAQ 7.16)。所以如果你想打印摘要信息,只需拨打print函数即可。

请注意,summary函数通常不会打印任何内容,它们会返回由print.summary函数打印的摘要对象。当您删除return声明则summary调用该函数的最后一件事,因此,返回值(摘要对象)是什么是从函数返回。如果你调用该函数没有分配结果什么然后自动打印踢。随着return语句,被返回的lmXY对象,所以这就是将印刷(但如果它被设置为不可见的将不打印)。