1

I have tried to calculate the log rate of return for a world index (labled acw) portfolio and a country index portfolio (labled chi). The world index works but the country index gives me the error "only 0's may be mixed with negative subscripts". I have combed the data and there are no zeros or negative numbers in it. I'm going insane trying to work it out. I am learning R for the first time so it is probably a very basic problem but I can't find an answer anywhere online. Here is the code,

> 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 

Any advice or help would be much appreciated!

4

1 回答 1

2

当然,这一切都是基于猜测......

但我觉得....

您的数据没有date列。您的根本失败是没有检查这一点。

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

然后你尝试下标data$acw[1:(td-1)]。你说,这行得通,因为它不会返回错误。但是你没有检查这个。我猜它返回 NULL 因为您的数据没有acw列。NULL 也是如此data$acw,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功能。

于 2012-09-16T07:58:15.753 回答