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

是否存在purrr::函数可替代mapply输出可添加至data的列而非list

解决方案

你可以使用purrr提供的带_vec后缀的映射函数直接生成向量,也可以结合dplyr的分组逻辑更简洁地完成需求,两种方案都可以直接把结果作为新列添加到原数据框中。

方案1:结合分组操作的最简写法

这种写法更符合tidyverse的使用习惯,不需要额外拆分分组计算行数:

library(tidyverse)

# 原有数据导入代码
m=
"
study group outcome
1     1       A
1     1       B
1     2       A
1     2       B
2     1       A
2     1       B
2     2       A
2     2       B
3     1       B
4     1       A
"
data = read.table(text=m, h=T)

set.seed(0)
# 直接分组生成新列
data <- data %>%
  group_by(study) %>%
  mutate(random_val = rnorm(n = n(), mean = study[1] * 0.1)) %>%
  ungroup()

方案2:完全对齐原有mapply逻辑的purrr写法

如果你需要完全复用原有mapply的参数逻辑,可以用purrr::map2_vec,它会自动将各迭代返回的数值拼接为一个原子向量,而非list:

set.seed(0)
# 提取每个study分组的行数,和原有逻辑一致
group_n <- sapply(group_split(data, study), nrow)
# 直接生成可添加为列的向量
data$random_val <- purrr::map2_vec(.x = group_n, .y = 1:4 * 0.1, .f = rnorm)

结果说明

两种方案得到的random_val列和你原有mapply输出list调用unlist()后的结果完全一致,可直接使用。如果你使用的purrr版本较低没有_vec后缀,也可以用map2 + unlist(use.names = FALSE)替代,效果相同。

内容的提问来源于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.29 07:36:08