计算投资组合(ETF)的回报率时的R误差

时间:2012-09-16 06:20:36

标签: r error-handling

我试图计算世界指数(labled acw)投资组合和国家指数投资组合(labled chi)的对数回报率。世界指数有效但国家指数给出了错误“只有0可能与负下标混合”。我已经梳理了数据,并且没有零或负数。我疯了,试图解决它。我是第一次学习R所以这可能是一个非常基本的问题,但我无法在网上找到答案。这是代码,

> data <- read.table("C:/Documents and Settings/Emma/My Documents/data.csv",header=T,sep=",")
> data <- data.frame(data)

> td<-length(data$date)
> t<-td-1

> acwr<-250*log(data$acw[2:td]/data$acw[1:(td-1)])
> chir<-250*log(data$chi[2:td]/data$chi[1:(td-1)])
Error in data$chi[1:(td - 1)] : 
  only 0's may be mixed with negative subscripts
> traceback()
No traceback available 

非常感谢任何建议或帮助!

1 个答案:

答案 0 :(得分:2)

这完全基于猜测当然......

但我想......

您的数据没有date列。你的根本失败不是检查这个。

因此td为零。你的第二次失败不是检查这个。

然后尝试下标data$acw[1:(td-1)]。你说,这有效,因为它不会返回错误。但你没有检查过这个。我猜它会返回NULL,因为你的数据没有acw列。所以data$acw是NULL,而R不关心你如何尝试和子集NULL。你回来了NULL。你的第三次失败不是检查这个。

然后尝试下标data$chi[1:(td-1)]。这失败了,因为data$chi存在,并且:

> 1:(td-1)
[1]  1  0 -1

因此你的下标中包含+1和-1。

在R下标中,这就是说要获得元素1而不是元素1(零是无关紧要的)。所以它失败了。

如果您完成了summary(data)或向我们展示了数据文件,那么这一切都很明显。目前只是猜测,直到你向我们展示这些东西,它会节省我20分钟。

尝试将R分解为元素并检查它们是否符合您的预期。作为一种解释性语言,R让你很容易。

当然,您应该在尝试使用data$date时检查元素的长度以获取数据帧的行数。这有一个nrow功能。