这个问题的根本主题实际上是关于《D&D 5E》中的积分购买系统,但在研究它时,我注意到这c_across()大大减慢了速度。
该方法
die_value <- 8L:15L
point_value <- c(0L, 1L, 2L, 3L, 4L, 5L, 7L, 9L)
determine_points <- function(n) {
sapply(n, function(x) point_value[which(die_value == x)])
}
sum27 <- crossing(
d1 = die_value,
d2 = die_value,
d3 = die_value,
d4 = die_value,
d5 = die_value,
d6 = die_value
) %>%
mutate(across(d1:d6, ~determine_points(.x), .names = "{col}_points")) %>% # see next blocks for options
Run Code Online (Sandbox Code Playgroud)
作为第一次尝试按行对d[n]_points列进行求和total_points,我尝试采用明显的rowwise %>% sum(c_across)路线
rowwise %>% mutate(total_points = sum(c_across(d1_points:d6_points)))
Run Code Online (Sandbox Code Playgroud)
然而,运行这个过程花了很长时间。相比之下,更明确的版本确实很快。 …