有没有系统的方法将R代码转换为矢量化代码?

时间:2009-09-08 17:11:04

标签: r loops

大多数循环代码看起来像这样

retVal=NULL
for i {
  for j {
    result <- *some function of vector[i] and vector[j]* 
    retVal = rbind(retVal,result)
  }
}

由于这是如此常见,是否有一种系统的方式来翻译这个成语?

这可以扩展到大多数循环吗?

2 个答案:

答案 0 :(得分:4)

plyr包提供了一组通用工具,用于在处理大数据结构时替换循环结构,将其分解为多个部分,独立处理每个部分,然后将结果重新组合在一起。

答案 1 :(得分:2)

第一个目标是获取工作代码。你在那里。然后尝试一些简单的选择。例如。

retVal <- matrix(NA, ni, nj)     # assuming your result is scalar
for (i in 1:ni)
   for (j in 1:nj)
       retVal[i][j] <- *some function of yours*
由于你没有为每个i,j组合重新分配内存,

已经运行

至于循环,您可以先用apply系列中的内容替换内循环。我不知道回答你的问题的一般内容 - 它取决于你的函数采用什么参数以及它产生什么类型的返回对象。