簡體   English   中英

使用 lapply 管理嵌套循環或循環

[英]Managing nested loops or loop with lapply

我的問題可能看起來微不足道,但我無法得到解決方案。 我有一個包含 5 個以股票命名的數據框的列表(我的真實列表包含 250 只股票)。 每個 dataframe 具有相同的列數和名稱:

  1. 日期:格式化為字符的時間序列
  2. 收益:股票收益的時間序列
  3. DJSTOXX:指數收益的時間序列
  4. EPS:收益公告日期,其中也包含 NA,格式為字符。

對於每個 dataframe,我想從erer evReturn ,它返回一個列表,其中包含有關異常返回的不同日期度量。 function 的主要輸入是y ,應該是 dataframe,包含日期列(時間序列)、收益列、索引收益列和收益公告日期列。 正如您在下面看到的,此代碼為公司NESN運行,針對每個發布公告的日期進行事件分析。 在這里,我將時間序列中的每個日期設置為等於 EPS 日期,省略 NA,執行 function evReturn 它將 output 保存在hh3中,這是一個列表,其中計算每個 EPS 日期的事件返回。

hh3 <- list()
for (i in na.omit(dflist$NESN$Date[dflist$NESN$Date == dflist$NESN$EPS])){
  hh3[[i]] <- evReturn(y = dflist$NESN, firm = "return", event.date = i, y.date = "Date",
                       index = "DJSTOXX", event.win = 2, est.win = 50, digits = 3)
}

現在我的問題是:如何設置它以便為列表中的每只股票運行此代碼? 因此,我希望結果列表有 5 個列表(每只股票 1 個),每個 EPS 日期都有一個列表。

正如您在evReturn function 中看到的那樣,我明確設置了 $NESN,但我想將其設置為 dflist 中的每個dataframe執行 ZC1C425268E68385D1AB5074C17A94。

我嘗試了以下 lapply :

lapply(dflist, function(x){
  for (i in na.omit(x$Date[x$Date == x$EPS])){
    dflist2[[i]] <- evReturn(y = x, firm = "return", event.date = i, y.date = "Date",
                             index = "DJSTOXX", event.win = 2, est.win = 50, digits = 3)
  }})

但它返回:

Error in xj[i] : only 0's may be mixed with negative subscripts

因此,我嘗試將 2 個循環嵌套為:

for(j in seq_along(dflist)){
  for (i in na.omit(dflist$j$Date[dflist$j$Date == dflist$j$EPS])){
    hh7[[j]][i] <- evReturn(y = dflist$j, firm = "return", event.date = i, y.date = "Date",
                         index = "DJSTOXX", event.win = 2, est.win = 50, digits = 3)
  }}

但它返回hh7作為長度為 0 的列表。

任何幫助都非常感謝,因為我似乎遺漏了一些東西。

謝謝

很難確定如何提供幫助,因為您沒有提供任何示例數據,但您應該能夠執行以下操作:

get_ev_return <- function(d) {
  dates = na.omit(d[d$Date = d$EPS, "Date"])
  lapply(dates, \(date) {
    evReturn(y=d,firm="return", event_date=date, y.date = "Date", index="DJSTOXX", event.win=2, est.win=50, digits=3)
  })
}

lapply(dflist, get_ev_return)

在運行lapply()之前,在NESN上測試get_ev_return() ,看看它是否適用於一幀。 此外,您需要檢查get_ev_return() function 中的dates是否包含任何日期。也許您有一個或多個 data.frames,其中沒有Date == EPS的行 ....再次,這就是問題所在在您的問題中不提供任何示例數據。

暫無
暫無

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

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