我有一个R大师的问题。我将在以下示例中说明它:
我有一个载体,比如1,2,3,4,5,6,7,8 我想得到两个元素之和的向量:3,5,7,9,11,13,15
这只是一个例子,我不是在寻找一个技巧,我想用矢量化和索引来做。有什么方法可以访问隐式循环参数吗?
非常感谢。
答案 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