【问题标题】:Double for-loop not working双for循环不起作用
【发布时间】:2014-02-04 14:50:00
【问题描述】:

我正在尝试根据规则为向量列表创建一组新向量。我的输入由 3 个法线向量(indexrfreeret)和几个向量的列表(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。我假设正在发生的事情是karetroll 长,所以你会看到错误......使用dput 之类的东西来包含你的数据并花一些时间来read about reproducible examples
  • 如果你能给出一些你的向量的例子就很好了,这样我们就可以更清楚地理解你了。例如,也许使用dput(roll),这样我们就可以将其剪切并粘贴到我们的浏览器中。
  • 好的,一旦我阅读了 dput,我将不得不回来。对不起,不清楚的问题。
  • 顺便说一句,您是否有理由需要 aret 成为列表而不是维度矩阵 k X length(ret)
  • 不是真的,只是认为既然“滚动”在列表中,这将是最简单的方法

标签: r for-loop vector finance


【解决方案1】:

应该这样做,但我同意@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
 })

【讨论】:

  • 非常感谢,非常感谢!正如您可能认为的那样,我对 R 很陌生,并且仍在努力寻找解决问题的“合乎逻辑”的方法。我一定会尝试阅读给出的提示:)
  • 没问题。我在 R 方面也没有经验,但希望能更多地了解它并分享我学到的一点点。我发现许多基于数组的语言(想想 Matlab、R、Numpy 等)的情况是:避免循环。这些语言的结构通常更类似于功能映射(en.wikipedia.org/wiki/Map_(higher-order_function),a)更易读,b)(通常)更快
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2013-12-31
  • 2018-04-22
  • 2016-05-13
  • 2018-09-09
  • 1970-01-01
相关资源
最近更新 更多