【发布时间】:2014-02-04 14:50:00
【问题描述】:
我正在尝试根据规则为向量列表创建一组新向量。我的输入由 3 个法线向量(index、rfree、ret)和几个向量的列表(roll)组成,所有向量的长度相同。我希望新向量遵循以下规则:if index>roll -> ret,else rfree,以便根据滚动向量的“k”个数评估索引,给出“k”个仅包含 ret 和 rfree 输入的新向量.我当前的程序不起作用,我不知道为什么。我得到的错误信息是
"Error in `*tmp*`[[j]] : subscript out of bounds"
但我真的不知道为什么。任何帮助是极大的赞赏。
#Input:
roll <- list(runif(85),runif(85))
index <- runif(85)
rfree <- rnorm(85)
ret <- rnorm(85)
#Programe:
aret <- function(index, roll, ret, rfree, k=2){
aret <- list()
for (j in seq(k))
for (i in 1:length(ret)){
if (roll[[j]][i]>index[i])(aret[[j]][i] <- ret[i])
else(aret[[j]][i] <- rfree[i])
}
}
【问题讨论】:
-
k=k在这里没有做任何事情。而且,为了完全回答您的问题,我们需要查看您的一些数据。具体来说,index,roll,ret` 和rfree。我假设正在发生的事情是k比aret或roll长,所以你会看到错误......使用dput之类的东西来包含你的数据并花一些时间来read about reproducible examples -
如果你能给出一些你的向量的例子就很好了,这样我们就可以更清楚地理解你了。例如,也许使用
dput(roll),这样我们就可以将其剪切并粘贴到我们的浏览器中。 -
好的,一旦我阅读了 dput,我将不得不回来。对不起,不清楚的问题。
-
顺便说一句,您是否有理由需要
aret成为列表而不是维度矩阵kXlength(ret)? -
不是真的,只是认为既然“滚动”在列表中,这将是最简单的方法