如何使用sapply摆脱此嵌套循环?

时间:2019-07-21 23:24:23

标签: r

我对R有点陌生,并且编写了以下嵌套循环:

for (col in date2) {
    for (row in 1:nrow(file2)) {
      file2[row, col] <- as.character(parse_date_time(file2[row, col], c("Ymd", "mdY", "mdy", "ymd", 
                                                                         "mdy_HM", "mdy_H", "mdy_HMS", 
                                                                         "ymd_HM", "ymd_H", "ymd_HMS")))
    }
  }

我注意到代码现在运行的速度大大降低,这可能是因为R并未针对快速运行嵌套循环进行优化。有没有一种方法可以使用sapply进行重构?我已经尝试过这样做,但是到目前为止,让它按预期运行一直没有运气。

1 个答案:

答案 0 :(得分:0)

如果我们具有行索引和列索引,请cbind提取出“ file2”的元素

library(lubridate)
ij <- cbind(seq_len(nrow(file2)), seq_along(date2))    
parse_date_time(file2[ij], fmtVec)

如果打算将其应用于多个列

library(dplyr)
file2 %>%
      mutate_at(vars(date2), parse_date_time, select_formats = fmtVec)

或使用lapply中的base R

file2[date2] <- lapply(file2[date2], parse_date_time, select_formats = fmtVec)

数据

fmtVec <- c("Ymd", "mdY", "mdy", "ymd",  "mdy_HM", "mdy_H", "mdy_HMS", 
                            "ymd_HM", "ymd_H", "ymd_HMS")