更正我的函数输出的格式

时间:2012-07-11 22:04:29

标签: r

这是我计算中国股市beta的函数:

mybeta <- function(company) {
  require(quantmod)
  setSymbolLookup(CSI300=list(name="000300.ss",src="yahoo"))
  getSymbols("CSI300",from="2010-01-01",to="2011-01-01")
  setSymbolLookup(SDB=list(name=company,src="yahoo"))
  getSymbols("SDB",from="2010-01-01",to="2011-01-01")
  csi=as.data.frame(weeklyReturn(CSI300))
  sdb=as.data.frame(weeklyReturn(SDB))
  cbeta=merge(csi, sdb, by="row.names")
  cov(cbeta[2],cbeta[3])/var(cbeta[2])
}

当我输入时:

mybeta("600005.ss")
                  weekly.returns.y
weekly.returns.x          1.105631

我只想要输出中的1.105631,而不是&#34; weekly.returns.y&#34;和&#34; weekly.returns.x&#34;。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

很明显英语不是你的第一语言,所以我会耐心等待。

您已经透露了您实际上要做的事情,因此您可以避免前两个问题(onetwo),因为它们对解决您的实际问题无用。

以下是您的功能的修改版本,它实现了相同的目标,并且减少了不必要的工作。

mybeta <- function(company) {
  if(!require(quantmod))
    stop("quantmod must be installed; try install.packages('quantmod')")
  setSymbolLookup(CSI300=list(name="000300.ss",src="yahoo"), 
                  SDB=list(name=company,src="yahoo"))
  getSymbols(c("CSI300","SDB"),from="2010-01-01",to="2011-01-01")
  ret <- merge(weeklyReturn(CSI300),weeklyReturn(SDB))
  cbeta <- cov(ret, use="pairwise.complete.obs")
  cbeta[1,2]/cbeta[1,1]
}

答案 1 :(得分:2)

使用as.numeric

制作功能的最后一行

as.numeric(cov(cbeta[2],cbeta[3])/var(cbeta[2]))

顺便说一句,没有理由在这里使用data.framexts太棒了;拥抱它。

编辑: 除了不需要转换为data.frame之外,您的函数可能更安全,没有副作用(例如,getSymbols("SDB")将返回不同的值,具体取决于您传递给{{1}的内容}最后;另外,mybeta默认情况下会在getSymbols中分配数据。您可以考虑使用.GlobalEnv。这是我编辑您的功能的方式:

auto.assign=FALSE