在矢量化期间可以在隐式循环中访问循环参数吗?

时间:2014-08-19 16:44:53

标签: r vector

我有一个R大师的问题。我将在以下示例中说明它:

我有一个载体,比如1,2,3,4,5,6,7,8 我想得到两个元素之和的向量:3,5,7,9,11,13,15

这只是一个例子,我不是在寻找一个技巧,我想用矢量化和索引来做。有什么方法可以访问隐式循环参数吗?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用动物园套餐中的rollapply

> x <- 1:8
> rollapply(x, width=2, FUN=sum)
[1]  3  5  7  9 11 13 15

答案 1 :(得分:0)

您可以使用sapply或其变体,并编写一个函数,该函数总结给定索引和矩阵的适当元素。例如,

m <- matrix(1:9, nrow=3)
m

创建包含所有可能索引对的数据框

m_ind <- expand.grid(1:nrow(m),1:ncol(m), stringsAsFactors = FALSE)
names(m_ind) <- c("i","j")
m_ind
m[as.matrix(m_ind[,1:2])]

对角线或平行线可以通过常量差异或索引的常数和来描述

m_ind$dif_ij <- m_ind$i - m_ind$j
m_ind$sum_ij <- m_ind$i + m_ind$j

然后总结你想要的元素

m_ind$sum1 <- sapply(1:nrow(m_ind), function(k, mydf, colname, mymatr) 
          sum(mymatr[as.matrix(mydf[mydf[, colname]==mydf[k, colname], c("i","j")])]),mydf=m_ind, colname="dif_ij", mymatr=m)
m_ind$sum2 <- sapply(1:nrow(m_ind), function(k, mydf, colname, mymatr)
          sum(mymatr[as.matrix(mydf[mydf[, colname]==mydf[k, colname], c("i","j")])]), mydf=m_ind, colname="sum_ij", mymatr=m)

,最后将它们结合起来

m_ind$sum <- m_ind$sum1 + m_ind$sum2
m_ind