2011-04-12 55 views
2

我有關於如何申請R裏面的函數到多維數組的問題。部分行和數

例如,考慮這種操作,在這裏我減少其他項目的總和的條目。

ppl["2012",,,,,1] <- ppl["2012",,,,,1] 
- ppl["2012",,,,,2] - ppl["2012",,,,,3] - ppl["2012",,,,,4] 
- ppl["2012",,,,,5] - ppl["2012",,,,,6] - ppl["2012",,,,,7] 
- ppl["2012",,,,,8] 

雖然在這種情況下減去個別值可能是可行的,但我更喜歡面向矢量的方法。

如果我是熟悉的多維矩陣代數我大概能想出應用時進行必要的操作矩陣,但這是太複雜由於涉及的維數。

sum(ppl["2012",,,,,2:8])是不是正確的解決方案,因爲sum()總是返回標量。

我可以使用,執行必要的操作循環,但違背定向矢量編程範式。

感謝您的幫助!

編輯:這裏是解決原來的問題,基於Andrie的建議: ppl[paste(i),land,,,,1] <- ppl[paste(i),land,,,,1] - apply(ppl[paste(i),land,,,,2:8],c(1,2,3),sum)

+1

您需要使用'apply'與'sum'得到你想要的東西。但是,由於您沒有提供數據**的示例**,因此我無法給出確切的代碼。 – Henrik 2011-04-12 13:50:11

回答

4

EDITED

下面是使用applysum返回跨越計算總和的例子多維表格:

mat <- array(1:27, dim=c(3, 3, 3)) 

假設您想計算第三維的總和fo r前兩個維度的每個組合。

然後代碼要做到這一點就變成了:

apply(mat, c(1,2), sum) 

    [,1] [,2] [,3] 
[1,] 30 39 48 
[2,] 33 42 51 
[3,] 36 45 54 
+0

感謝您的回答!事實上,這兩個數字是相同的,但我不想減去總數。 相反,我想計算每一年,每一個國家,每一個家庭組成等值的最後一維的總和。 – mzuba 2011-04-12 14:01:16

+0

@Martin Zuba,感謝您的評論。我修改了我的答案以反映這一點。 – Andrie 2011-04-12 14:09:14

+0

是的,那是我需要的!某種求和算法,它會返回一個維度小於原始維度的結果。非常感謝! – mzuba 2011-04-12 14:17:51