2013-02-07 32 views
1

我想我有一個相當直接和容易回答的問題,但我不能自己想出一個解決方案。R雙迴路選擇輸出

我有一個向量有10個元素,我想得到一個新的向量,它由第一個元素減去第二個元素,第一個元素減去第三個元素,依此類推。然而,在同一個向量中,我希望第二個元素減去第三個元素,第二個元素減去第四個元素等等的數字,對於其他元素也是如此。

在我看來,我需要兩個對於這樣的循環,但隨着運行以下腳本後,我得到了太多的元素:

for (w in 1:test1){ 
    for (u in 1:test1) { 
    print(mean[[u]] - mean[[w]]) }} 

現在我使用的打印命令,但我想分配結果到一個向量。

預先感謝您!

回答

3
ttt <- (1:5)^3 
#[1] 1 8 27 64 125 

result <- outer(ttt,ttt,"-") 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 0 -7 -26 -63 -124 
#[2,] 7 0 -19 -56 -117 
#[3,] 26 19 0 -37 -98 
#[4,] 63 56 37 0 -61 
#[5,] 124 117 98 61 0 

現在選擇你需要的元素(對於我來說這不是完全清楚的問題)。

也許你想這樣的:

t(result)[lower.tri(t(result))] 
[1] -7 -26 -63 -124 -19 -56 -117 -37 -98 -61 
+0

非常感謝!那正是我正在尋找的。我沒有意識到「外層」功能。 – User33

+0

@ user2023167'outer'非常有用,但需要注意的是,如果矢量很大,可以很容易地耗盡內存。 – Roland

+0

這可能會導致一些問題,因爲它是模擬研究的一部分。可以告訴我一個大型矢量是多麼「大」嗎? – User33