簡體   English   中英

在向量的多個子集上使用apply函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM