2015-11-02 34 views
0

我有一個數組X,一些n,想以產生長度n的向量YY[i]是平均所有X[j]j %% n == i(所有j全等到i MOD n)。R:快速獲取給定同餘值的指數值的均值?

現在,我的代碼是這樣的:

Y = vector("numeric",n) 
Z = vector("logical",n) 
for(i in 1:n) { 
    Z[] = FALSE 
    Z[i] = TRUE 
    Y[i] = mean(X[Z]) 
} 

這工作,但這個操作必須運行在我的項目時間的相當大的數字,我想知道是否有使用方法內置R函數或語法以避免for循環。

任何幫助,使其更快,而不去C將非常感激。

+0

請提供X'的'一個例子。 – Roland

+1

在1到n的範圍內,只有一個數字「j」,其中'j'與全部'i'mod'n'一致 - 這個數字是'j = i'所以'Y [i] < - mean(X [ i')' – jogo

+0

'j'不在1到n的範圍內,'j'具有比'n'更長的長度的索引X. – Chocosup

回答

1

你可以使用sapply,這和基於該規則將只選擇全等數字:

n <- 10 
X <- sample(1:100, n, replace = TRUE) 
Y <- sapply(1:n, function(i) mean(X[X %% n == i])) 
+0

不知道我理解OP,但'sapply(split(X,X %% 10),mean)'似乎是類似的東西。 – Frank

+0

這給出了與'i'mod'n'一致的X的值的平均值,但是我要找的是X的「n中的一個」的值的平均值(更確切地說,其索引與'i' mod'n'一致)。我發佈的代碼確實有效,我只是在尋找一種加速它的方法。 – Chocosup