替代嵌套 '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
我有下面的代码,我想写得更高效。在这种情况下,我不知道如何使用函数 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