You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言rep函数each参数不支持向量化的替代方案有哪些?

解决方案

rep()的each参数原生设计为仅接受单个标量值,不支持向量化输入,你需要的「每个元素对应重复指定次数」的需求可通过以下方案实现:

基础R实现

  • 方案1:使用rep()的times参数
    该参数原生支持向量化,刚好匹配你的使用场景,修改代码如下即可得到正确结果:
n_study <- 5
n_per_study_rows <- c(3,5,3,3,2)
result <- rep(1:n_study, times = n_per_study_rows)

运行后输出为 1 1 1 2 2 2 2 2 3 3 3 4 4 4 5 5,完全符合预期。

小提示:rep()的each参数作用是「将输入向量的所有元素各自重复同一个固定次数」,times参数才是「输入向量的第i个元素重复times[i]次」,大部分场景下触发each参数警告都是因为混淆了两个参数的作用。

  • 方案2:使用gl()函数生成分组序列
    如果你的场景是生成固定分组标识,也可以用gl()函数直接构造:
result <- as.integer(gl(n = n_study, k = 1, length = sum(n_per_study_rows), labels = 1:n_study))

Tidyverse生态实现

  • 方案1:使用tidyr::uncount()展开序列
    如果是在数据处理流程中使用,更符合tidyverse风格的写法是先构造数据框再按计数展开:
library(tidyverse)

df <- tibble(
  study_id = 1:n_study,
  n_rows = n_per_study_rows
)

result_df <- df %>% 
  uncount(n_rows)
# 提取分组向量直接取result_df$study_id即可
  • 方案2:使用dplyr::rep_each()(dplyr 1.0.0及以上版本支持)
    该函数的第二个参数支持向量化输入,可直接得到目标结果:
library(dplyr)
result <- rep_each(1:n_study, times = n_per_study_rows)

内容的提问来源于stack exchange,提问作者Simon Harmel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:54:04