R 对所有参数组合进行矢量化

R 对所有参数组合进行矢量化,r,vectorization,R,Vectorization,有没有一种方法可以将R函数矢量化到多个参数的所有组合上,并将结果作为列表返回 例如,在rnorm上使用Vectorize会产生以下结果,但我希望有一个对应于每个参数组合的向量列表,因此它应该返回一个包含60个向量的列表,而不仅仅是5个: > vrnorm <- Vectorize(rnorm) > vrnorm( 10*1:5, mean = 1:4, sd = 1:3) [[1]] [1] 1.37858918 -0.85432372 1.87321175 2.0

有没有一种方法可以将R函数矢量化到多个参数的所有组合上,并将结果作为列表返回

例如,在rnorm上使用Vectorize会产生以下结果,但我希望有一个对应于每个参数组合的向量列表,因此它应该返回一个包含60个向量的列表,而不仅仅是5个:

> vrnorm <- Vectorize(rnorm)

> vrnorm( 10*1:5, mean = 1:4, sd = 1:3)

[[1]]
 [1]  1.37858918 -0.85432372  1.87321175  2.08362291  0.02950438  1.67967249
 [7]  2.25954748  1.44031251  0.09816078  0.91365201

[[2]]
 [1]  1.7717267  1.7961157  2.3291686  2.6114272  2.6228930 -0.2580403
 [7]  3.3232109 -0.4652434 -0.4803258 -0.1170871  0.1158350 -1.0902252
[13] -0.6400934  3.6625290  2.5924096  4.5878564  0.7265718  3.2034281
[19] -0.2499768  2.0164275

[[3]]
 [1]  5.8251252  3.1089121  2.8893594  2.9079357  1.9308677  4.3359878
 [7] -0.3668157  4.9728508 -0.6494110  6.7729562  6.1623976 -0.1696638
[13]  5.4664038  3.8141798 -3.1842879  2.3985010  0.3840465  4.0696628
[19]  4.8217798  3.3135100  4.9028273  3.6193840  4.8861864  3.9871897
[25] -0.1059491  3.8961742  4.8293925  3.8935335  6.3194862  4.7846143

[[4]]
 [1] 3.737043 2.849215 4.611868 3.494396 2.909659 4.861474 2.000194 3.343171
 [9] 4.019523 3.277575 3.885272 3.331160 4.581551 4.960162 3.061960 5.359514
[17] 4.651848 3.640535 3.612368 4.338019 5.233665 3.585976 4.018191 4.320883
[25] 2.598541 3.519587 5.231375 4.733647 2.493334 2.791483 4.330052 2.498424
[33] 3.317115 3.515012 5.079780 4.720884 3.055191 5.262385 1.939961 4.779480

[[5]]
 [1]  4.31697756  0.93754587  3.96698522 -0.03680018  1.94987430  1.73985617
 [7] -1.42300550  2.07764933  0.45701395  2.42548257  0.67745524 -2.42054060
[13]  1.14655845  1.60277193 -1.04636658  0.94097335  3.07688803  0.58049012
[19]  1.25812532  1.91613097 -2.95408979  3.00990345 -0.67314868  0.64746260
[25]  1.69640497  0.68493689  2.84261574  1.65290227  4.16990548 -3.30426803
[31]  3.80508273  5.95888355 -0.09021591  3.88157980 -1.19166351  2.70208228
[37] -0.56278834 -0.83943824 -0.86868493 -1.19995506 -2.30275483  1.70435276
[43]  2.67984044 -0.04976799  0.98716782  2.71171575  5.21648742  0.13860495
[49]  1.61038570  0.50679460
使用expand.grid展开所有参数并创建数据帧,然后使用mapply

使用expand.grid展开所有参数并创建数据帧,然后使用mapply

您还可以使用purrr::pmap作为mapply的替代方案

您还可以使用purrr::pmap作为mapply的替代方案

dat <- expand.grid(n = 10 * 1:5, mean = 1:4, sd = 1:3)
mapply(rnorm, dat$n, dat$mean, dat$sd, SIMPLIFY = FALSE)
library(purrr)

dat <- expand.grid(n = 10 * 1:5, mean = 1:4, sd = 1:3)

pmap(dat, rnorm)