【问题标题】:R for loop over multiple variableR for循环遍历多个变量
【发布时间】:2016-01-18 21:30:01
【问题描述】:

R 在 Python 中像这样循环 2 个向量的惯用方式是什么

for i,j in zip(Is, Js)

R中最明显的方法是沿着索引走

for (idx in seq_along(Is)) {
    i = Is[idx]
    j = Js[idx]

}

只是想知道是否有不那么麻烦的方法?

编辑:

我正在使用 for 循环进行参数扫描,然后进行绘图。避免 for 循环的首选方法也将有所帮助。比如

results = data.table()
for (threshold in c(2,3,4,5)) {
    largeRtn = rtn[abs(rtn)>threshold*volatility]
    results = rbind(results, someAnalysis(largeRtn) )
    qplot(largeRtn, ...)
}

【问题讨论】:

  • 您能详细说明您要达到的目标吗?通常,R 中的 for 循环不是要走的路。您可以考虑提供reproducible example
  • 尽可能避免它 - 大多数函数都将向量作为输入,没有像 python 中那样好的迭代器。
  • @Heroka,我添加了一个示例,尽管仍然不是“工作示例”。
  • 根据您提供的数据,您能回答这个问题吗?
  • @Heroka,抱歉,不明白你的意思

标签: r for-loop


【解决方案1】:

我不确定你的 python 代码是做什么的,但也许 foreachiterators 包是一个选项:

library(foreach)
library(iterators)

zip <- function(...) iter(obj = expand.grid(...), by = "row")
foreach(d = zip(i = 1:3, j = 5:10), .combine = c) %do% {d[,"i"] * d[,"j"]}
#[1]  5 10 15  6 12 18  7 14 21  8 16 24  9 18 27 10 20 30

当然,如果可能的话,你应该避免循环。

【讨论】:

    【解决方案2】:

    这样的东西通常类似于 R:

    func = function(a, b) {
        return(a*b)
    }
    a = c(2,3,1,7,8)
    b = c(4,6,7,0,1)
    mapply(func, a = a, b = b)
    [1]  8 18  7  0  8
    

    当然在这种情况下,我们可以很容易地进行矢量化:

    a * b
    [1]  8 18  7  0  8
    

    但在更复杂的情况下,矢量化可能不是一种选择,那么您可以使用第一种方法。

    也许我写的this tutorial可以帮到你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多