【问题标题】:using lapply for nested loops使用 lapply 进行嵌套循环
【发布时间】:2023-03-28 20:31:01
【问题描述】:

我在R 中学习了一点lapply 魔法,但还没有弄清楚如何替换嵌套循环——这也可能吗?

这是我的问题,以及嵌套循环解决方案。

monCode <- c('F', 'G', 'H', 'J', 'K', 'M', 'N', 
        'Q', 'U', 'V', 'X', 'Z')
yearRange <- as.character(3:15)
yearRange[as.numeric(yearRange) < 10] <- as.character(paste0("0", yearRange[as.numeric(yearRange) < 10]))

outList <- vector()
for(Yr in yearRange) {
    for (mon in monCode) {
        outList <- c(outList, (paste0("IB", mon, Yr, " Comdty")))
    }
}

我将如何使用嵌套的lapply 函数而不是嵌套循环来做到这一点?

提前致谢

【问题讨论】:

    标签: r loops lapply


    【解决方案1】:

    不需要嵌套循环或嵌套 lapply。

    使用expand.grid 创建monCodeyearRange 的所有组合,然后使用do.call(sprintf,...) 连接它们

    f <- expand.grid(monCode,yearRange)
    outList <- do.call(sprintf, c(f, fmt = 'IB%s%s comdty'))
    

    【讨论】:

    • 我从do.call 行收到错误Error in (function (fmt, ...) : too few arguments。我已经能够从paste0("IB", f[,1], f[,2], " Comdty") 获得一些有用的东西——我对sprintf 的理解不足以解决这个问题。什么问题?
    • 问题是使用list(... 而不是c(...。查看编辑。
    • +1 / 接受。谢谢。 expand.grid 消除了我的大部分嵌套循环。
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多