替代嵌套 'for' 循环 R

Alternative nested 'for' loop R

我有下面的代码,我想写得更高效。在这种情况下,我不知道如何使用函数 mapplay

a <- c(1,2,3)
b <- c(4,5,6)
M<- matrix(0,nrow=3,ncol=3)

for (i in 1:length(a)){
     shape= a[i]

     for (j in 1:length(b)){
     rate=b[i]

     X <- rgamma(100,shape,rate)
     M[i,j] <- ks.test(X,"pgamma",a,b)$p.value
      }
}

如果您提供有效的代码(M 未定义)并定义您的 objective 而不是提供可能的 进程.

此外,您可能想定义“高效”的含义:最小代码行数?最快的执行?最普遍?

但无论如何,我认为这里有一个管道可以满足您的需求。

library(tidyverse)

set.seed(123)

tibble() %>% 
  expand(
    shape=c(1,2,3), 
    rate=c(4,5,6), 
    X=rgamma(100,shape,rate)
  ) %>% 
  group_by(shape, rate) %>% 
  summarise(M=ks.test(X,"pgamma", shape, rate)$p.value, .groups="drop")
# A tibble: 9 × 3
  shape  rate        M
  <dbl> <dbl>    <dbl>
1     1     4 6.10e- 4
2     1     5 2.22e- 7
3     1     6 6.44e-11
4     2     4 1.34e- 4
5     2     5 4.43e- 2
6     2     6 4.41e- 1
7     3     4 0       
8     3     5 6.09e-12
9     3     6 1.02e- 7