2015-10-20 47 views
-5

什麼在Python超過2個載體這樣的慣用方式中的R循環R表示遍歷多個變量

for i,j in zip(Is, Js) 

R中的顯而易見的方法是沿指數

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

}去

只是想知道是否有一個不那麼麻煩的方式?

編輯:

我使用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, ...) 
} 
+6

你能詳細說明你想達到的目標嗎?通常,R中的for循環不是要走的路。你可以考慮提供一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – Heroka

+0

當你可以避免它時 - 大多數函數都將向量作爲輸入,但在python中沒有很好的迭代器。 – jenesaisquoi

+0

@賀岡,我增加了一個例子,但仍然不是「工作示例」。 – jf328

回答

2

我不知道你的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我寫的可以幫助你。