我的第一個問題是:如何應用一個有效的例程來迭代給定數據幀的兩個向量的值(成對)?R中的數據幀的兩個向量的元素操作
更具體地,使用下面的數據幀考慮下面的例子:
df0 <- data.frame(matrix(c(1,2,2,3,1,3,0.4,0.2,0.2,0.1,0.4,0.1),nrow=6,ncol=2))
colnames(df0) <- c("value","frequency")
的第一列是一個真正的值,第二列是一個頻率(或權重)。注意:重量必須是嚴格正面的,它們可能會重複,它們不一定加起來(因爲重複)。
我執行以下循環來計算我的函數P.這P被認爲是一個數
# Define two parameters
K = 1/2
alpha = 0
# LOOP
mattemp <- matrix(,nrow=length(df0$value), ncol=length(df0$value))
for(i in 1:length(df0$value)) {
for(j in 1:length(df0$value)) {
mattemp[i,j] <- df0$frequency[i]^(1+alpha) * df0$frequency[j] * abs(df0$value[i]-df0$value[j])
P <- K * sum(mattemp)
}
}
基本上0和1之間
,我的函數P被計算:P = K * (0.4^alpha * 0.2 * |1-2| + 0.4^alpha * 0.1 * |1-3| + ...
只要矩陣很小,此代碼就可以很好地工作。
但是,我正在嘗試爲大矩陣(5400 x 5400)實現此例程,並且此LOOP似乎沒有找到結尾。
我已經嘗試使用foreach
命令(使用%dopar%
)來循環它,但它不起作用。
R是否有一個聰明而簡潔的例程?只要效率高,它不需要遵循上述結構。
非常感謝您
這看起來不錯。 – RHertel
你確定這裏有這個步驟:'vald < - abs(val [,1] - val [,2])'?你得到P = 0.02,我得到P = 0.18。 –
或許,你可以避免在索引('combn(nrow(df0),2)')上調用'combn'兩次,然後索引「value」和「frequency」。另外,'[,1]'和'[,2]'應該分別是'[1,]'和'[2,]'? –