Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 双循环不工作_R_For Loop_Vector_Finance - Fatal编程技术网

R 双循环不工作

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" 但我真的不明白为什么。非

我正在尝试根据一个规则为向量列表创建一组新向量。我的输入包括3个法向量(
索引
自由
返回
)和几个向量的列表(
滚动
),所有向量长度相同。我希望新向量遵循以下规则: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
 })

roll
k=k
在这里什么都不做。为了充分回答您的问题,我们需要查看您的一些数据。具体来说,
索引、
滚动
ret`和
rfree
。我假设发生的是
k
aret
roll
长,因此您可以看到错误。。。使用类似于
dput
的方法来包含您的数据,并花一些时间来完成。如果您能给出一些向量的示例,那就太好了,这样我们可以更清楚地理解您。例如,可能使用
dput(roll)
,这样我们就可以将其剪切并粘贴到浏览器中。好的,我在阅读完dput后必须返回。对不起,这个问题不清楚。顺便问一下,你为什么需要将aret作为一个列表,而不是一个维度矩阵
k
X
length(ret)
?不是真的,只是想既然“roll”在一个列表中,这将是最简单的方法谢谢,这真的很感谢!正如你可能认为的那样,我对R很陌生,仍然在努力寻找解决问题的“逻辑”方法。我一定会仔细阅读上面的提示:)没问题。我在R方面也不是很有经验,但我希望能了解更多,分享我学到的东西。我发现许多基于数组的语言(比如Matlab、R、Numpy等)的情况是:避免循环。这些语言通常具有更类似于函数映射的结构(a)更可读,b)(通常)更快