假設我們有以下的載體:從迭代向量提取元素進一步的操作
x <- c(2, 13, 9, 12, 10, 19, 15, 17, 14, 3, 8, 20, 16, 4, 18, 6, 5, 1, 7, 11)
由於是明顯的,矢量,讓我們把它叫做X,有20個觀測。
現在,想象一下以下內容:
k = 3
而且,我們要提取(I + K-1)X/2個元素,得到一個新的載體,把它叫做 「小X」。
這意味着,對於第一元件,I = 1,I將提取下列元件:
for i = 1, extract (1+3-1)/2 = 3/2 = 1.5
換句話說,所述1.5th元件,其中,當舍入變爲2,從而使元件我正在提取的實際上是i = 2,在這種情況下是13.
如何循環遍歷向量並迭代應用相同的過程,最終得到一個包含每個(i + k) -1)/ 2個元素?
謝謝。
小編輯
這是要求的「小X」具有長度18 爲什麼的原因如下:
我有含第(i + K-中觀察到的殘留物的載體1)/ 2從滾動線性模型。這個向量長度爲18,被稱爲「detrends」。
我想從X的(i + k-1)/ 2個元素中減去「detrends」以獲得長度爲18的第四個向量Y,稱爲「Y」。
因此,「detrends」和向量「小X」應該具有相等的長度。
我Y的結果應該是:
{8., 11.3333, 10.3333, 13.6667, 14.6667, 17., 15.3333, 11.3333, 8.33333,
10.3333, 14.6667, 13.3333, 12.6667, 9.33333, 9.66667, 4., 4.33333, 6.33333}
鑑於detrends是:
{5.0000000 -2.3333333 1.6666667 -3.6666667 4.3333333 -2.0000000 1.6666667
2.6666667 -5.3333333 -2.3333333 5.3333333 2.6666667 -8.6666667 8.6666667
-3.6666667 1.0000000 -3.3333333 0.6666667}
考慮下面的一些評論,我發現的一些內容被複制過於頻繁。雖然我得到了一些正確的數字,但它們並不正確。
有人能澄清我怎樣才能得到所需的輸出爲Y,即:
{8., 11.3333, 10.3333, 13.6667, 14.6667, 17., 15.3333, 11.3333, 8.33333,
10.3333, 14.6667, 13.3333, 12.6667, 9.33333, 9.66667, 4., 4.33333, 6.33333}
其中:
Y = "little X" - "detrends"
感謝。
編輯2
雖然Odysseus210提供在以上規定的問題的適當方法,有在我配製問題代碼的方式的小的誤差。事實上,我沒有得到準確的訂單的原因是因爲我一直在尋找:
i +((k-1)/ 2))而不是(i + k-1)/ 2。這意味着Odysseus210的回答應該是:
x[sapply(1:(length(x) - 2), function(i) { i + round(((k - 1)/2)) })]
請注意,在舍入步驟之前應該包括我。 此調整提供了我正在尋找的正確數字。
我想感謝大家的幫助,無論如何。
不要循環。使用申請系列的其中一項功能。如'sapply()'。請參閱下面的答案。理解循環很好。但實際上,對於快速代碼,請使用apply系列。 – Odysseus210
'k < - 3; i < - c(1,10); x [round((i + k-1)/ 2)]' – Roland
謝謝羅蘭。你的答案有一些小問題,但直覺對我很好。 – Mattia