在R中如何对单个DataFrame迭代应用函数,无需使用for循环?
解决方案
方案1:基于purrr::reduce实现(无显式for循环,匹配你的原始思路)
reduce的入参不需要手动构造列表,传入长度为n的数值向量即可触发对应次数的迭代,实现效果和你嵌套调用add_row完全一致:
library(purrr) library(tibble) # 自定义函数,n为重复添加次数,...用来传递add_row的其他参数 add_n_rows <- function(df, n, ...) { reduce(1:n, \(acc, _) add_row(acc, ...), .init = df) } # 调用示例:在df开头添加3行 df <- tibble(a = 1:2, b = 3:4) res <- add_n_rows(df, n = 3, .before = 1)
说明:参数acc为每次迭代的累积结果,_是无需使用的迭代位占位符,迭代次数完全由n控制。
方案2:原生参数实现(效率更高,无需迭代)
tibble::add_row自带.rows参数可直接指定新增行数,不需要嵌套或迭代,写法更简洁:
add_n_rows <- function(df, n, ...) { add_row(df, ..., .rows = n) } # 调用效果和方案1完全一致 res <- add_n_rows(df, n = 3, .before = 1)
内容的提问来源于stack exchange,提问作者Alvaro Morales
相关产品推荐
相关产品推荐

