R语言重复调用函数时如何拆分参数向量为单次调用传参
R语言实现按向量参数逐元素调用函数并生成矩阵
下面是几种常用的实现方案:
- 方案1:基础包
sapply实现(最简单常用)
直接对参数向量遍历调用rnorm,返回结果默认是100行10列的矩阵,每列对应参数向量中一个均值生成的100个观测值:
values <- 1:10 result_mat <- sapply(values, function(m) rnorm(n = 100, mean = m, sd = 1))
如果需要按行排列,每一行对应一个均值的观测,转置矩阵即可:result_mat <- t(result_mat)
- 方案2:
vapply实现(运行更稳定)
如果要避免sapply的隐式类型转换问题,可以用vapply明确指定返回值的格式和长度,适合生产环境使用:
result_mat <- vapply(values, function(m) rnorm(100, mean = m, sd = 1), FUN.VALUE = numeric(100))
- 方案3:tidyverse生态
purrr包实现
如果你习惯用tidyverse工具链,可以用purrr的映射函数生成结果,支持直接输出数据框或矩阵:
library(purrr) # 按列合并为数据框,每列对应一个均值的观测 result_df <- map_dfc(values, ~rnorm(100, mean = .x, sd = 1)) # 转成矩阵格式 result_mat <- as.matrix(result_df)
你原来的写法
rnorm(100, mean=values, sd=1)是触发了R的向量回收机制:rnorm要生成100个值,values长度为10,正好是10的倍数,所以values会被重复10次依次给每个生成值当均值,最终每个均值仅对应10个观测,和你想要的每个均值生成100个观测的需求不符。
内容的提问来源于stack exchange,提问作者TVB22
相关产品推荐
相关产品推荐

