[英]Using an apply function on multiple subsets of a vector
我一直在尋找解決方案一段時間,但似乎沒有任何東西可以解決這個看似簡單的問題。
長話短說,我想在一個向量的多個子集上運行一個函數,但我試圖避免for循環。
舉個簡單的例子
x <- runif(20)
index <- round(runif(10,1,10))
[1] 7 8 4 6 9 3 1 2 8 7
現在我要做的是運行一個apply函數,它會找到x
的最后7個條目的(比方說)意思,然后是x
的最后8個條目,然后是x
的最后4個條目,等等。
這將以某種方式使用tail(x, n)
函數,但是我得到了錯誤的結果,因為apply函數系列將為其傳遞的參數中的每個元素返回一個結果(如在mapply中)因為length(x) != length(index)
,或傳遞對象中每個元素的一個結果(在這種情況下,x的20個元素),因此工作。 我希望得到10個手段作為輸出。
思考? 如果我能在某種程度上澄清這個例子,請告訴我。
您仍然可以使用xapply
函數。 您可以嘗試以下方式:
set.seed(1)
x <- runif(20)
index <- round(runif(10,1,10))
## [1] 5 5 9 8 4 1 4 6 3 9
sapply(index, function(n) mean(tail(x, n)))
## [1] 0.4622008 0.4622008 0.5185548 0.5222463 0.4519646 0.2787476 0.4519646
## [8] 0.4939800 0.2748015 0.5185548
只是為了檢查:
mean(tail(x, 5))
## [1] 0.4622008
mean(tail(x, 9))
## [1] 0.5185548
希望能幫助到你,
亞歷克斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.