在R中循环使用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, ...)
}
答案 0 :(得分: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我写的可以帮助你。
答案 1 :(得分:2)
我不确定你的python代码是做什么的,但也许foreach
和iterators
包是一个选项:
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
当然,如果可能的话,你应该避免循环。