簡體   English   中英

R:將功能應用於xts對象

[英]R: Applying a Function to an xts Object

我有一個xts對象:

Anchor_Date <- as.Date("2016-04-19")
End_Date <- as.Date(Anchor_Date + years(5))
Number_Days <- End_Date - Anchor_Date  
Xts_Object <- xts(rep(NA, Number_Days + 1), as.Date(Anchor_Date) + 0:Number_Days)

我還有一個函數,該函數以年為單位計算日期和開始日期之間的時間平方:

Time_Squared_Func <- function(Start_Date, Date) {
  Time_Squared <- as.numeric(((Date - Start_Date) / 365) ^ 2)
  Return (Time_Squared)
}

我想使用常量Start_Date =系列中的第一天將函數應用於xts對象,但是將Date參數作為xts對象該行中的日期。 結果在第一行應為0,在2017-04-19逐漸增加到1,在2018-04-19逐漸增加到4 ...

https://codereview.stackexchange.com/questions/39180/best-way-to-apply-across-an-xts-object

這表明vapply的速度比apply或lapply快得多,因此,如果可能的話,使用vapply將是理想的選擇,但是一切正常。

謝謝。

使用lapply和rbind

require(lubridate)

Anchor_Date <- as.Date("2016-04-19")
End_Date <- as.Date(Anchor_Date + years(5))
Number_Days <- End_Date - Anchor_Date  
Xts_Object <- xts(rep(NA, Number_Days + 1), as.Date(Anchor_Date) +  0:Number_Days)

Time_Squared_Func <- function(Start_Date, Date) {
  Time_Diff = as.numeric(Date - Start_Date)
  Time_Squared <- (Time_Diff / 365) ^ 2
  return (Time_Squared)
}

將第一個日期和每個行的索引(日期)傳遞給Time_Squared_Func函數,然后對輸出進行rbind以獲得最終結果

first_date = as.Date(index(first(Xts_Object)))

ts_lapply = do.call(rbind,lapply(as.Date(index(Xts_Object)),function(x) Time_Squared_Func(first_date ,x) ) )

ts_xts = xts(ts_lapply,as.Date(index(Xts_Object)))

for(i in 1:5) print(ts_xts[Anchor_Date+years(i)])
           # [,1]
# 2017-04-19    1
           # [,1]
# 2018-04-19    4
           # [,1]
# 2019-04-19    9
               # [,1]
# 2020-04-19 16.02193
              # [,1]
# 2021-04-19 25.0274

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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