R 双循环不工作
我正在尝试根据一个规则为向量列表创建一组新向量。我的输入包括3个法向量(R 双循环不工作,r,for-loop,vector,finance,R,For Loop,Vector,Finance,我正在尝试根据一个规则为向量列表创建一组新向量。我的输入包括3个法向量(索引,自由,返回)和几个向量的列表(滚动),所有向量长度相同。我希望新向量遵循以下规则:if index>roll->ret,else-rfree,以便根据滚动向量的“k”个数对索引进行评估,给出“k”个仅由ret和rfree输入组成的新向量。我目前的程序不起作用,我不知道为什么。我收到的错误消息是 "Error in `*tmp*`[[j]] : subscript out of bounds" 但我真的不明白为什么。非
索引
,自由
,返回
)和几个向量的列表(滚动
),所有向量长度相同。我希望新向量遵循以下规则: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])
}
}
#输入:
roll这应该可以,但我同意@Carl的观点,如果所有向量的长度都相同,矩阵在这里更容易操作
roll <- matrix(runif(170),ncol=2) #lets use a matrix instead
index <- runif(85) #index is your indicator variable when compared to roll
rfree <- rnorm(85) #assign if roll>index
ret <- rnorm(85) #assign if index>roll
#use vector operations when possible, for speed and readability. Look into
#sapply, lapply etc. Apply is useful for column/row operations in matrices
result<-apply(roll,2, function(x){
# we will use an anonymous function here for this,
#but you could define elsewhere if needed
w<-index>x # where is index larger than our roll entries
x[w]<-ret[w] #assign the corresponding ret there
x[!w]<-rfree[!w] #assign the corresponding rfree where appropriate
x
})
rollk=k
在这里什么都不做。为了充分回答您的问题,我们需要查看您的一些数据。具体来说,索引、
滚动、
ret`和rfree
。我假设发生的是k
比aret
或roll
长,因此您可以看到错误。。。使用类似于dput
的方法来包含您的数据,并花一些时间来完成。如果您能给出一些向量的示例,那就太好了,这样我们可以更清楚地理解您。例如,可能使用dput(roll)
,这样我们就可以将其剪切并粘贴到浏览器中。好的,我在阅读完dput后必须返回。对不起,这个问题不清楚。顺便问一下,你为什么需要将aret作为一个列表,而不是一个维度矩阵k
Xlength(ret)
?不是真的,只是想既然“roll”在一个列表中,这将是最简单的方法谢谢,这真的很感谢!正如你可能认为的那样,我对R很陌生,仍然在努力寻找解决问题的“逻辑”方法。我一定会仔细阅读上面的提示:)没问题。我在R方面也不是很有经验,但我希望能了解更多,分享我学到的东西。我发现许多基于数组的语言(比如Matlab、R、Numpy等)的情况是:避免循环。这些语言通常具有更类似于函数映射的结构(a)更可读,b)(通常)更快