我有系数的数据和参数的数据。示例:
coefficients <- data.frame(a = c(1, 2, 3),
b_w = c(3, 4, 5),
b_x = c(5, 6, 7))
parameters <- data.frame(w = c(0, 1),
x = c(2, 3))我希望通过对所有系数和参数组合的这两个数据帧乘以这两个数据帧来生成一个数据帧,其中每一列都根据参数数据中的相关行号编号。示例:
output <- data.frame(
params1 = c(coefficients$a[1] + coefficients$b_w[1]*parameters$w[1] + coefficients$b_x[1]*parameters$x[1],
coefficients$a[2] + coefficients$b_w[2]*parameters$w[1] + coefficients$b_x[2]*parameters$x[1],
coefficients$a[3] + coefficients$b_w[3]*parameters$w[1] + coefficients$b_x[3]*parameters$x[1]),
params2 = c(coefficients$a[1] + coefficients$b_w[1]*parameters$w[2] + coefficients$b_x[1]*parameters$x[2],
coefficients$a[2] + coefficients$b_w[2]*parameters$w[2] + coefficients$b_x[2]*parameters$x[2],
coefficients$a[3] + coefficients$b_w[3]*parameters$w[2] + coefficients$b_x[3]*parameters$x[2]
)
)在我看来,使用purrr是可能的,但我不知道如何开始。
发布于 2022-04-25 20:07:04
您可以在这里使用矩阵乘法:
coefs <- as.matrix(coefficients)
params <- as.matrix(parameters)
out <- coefs %*% t(cbind(1, params))
colnames(out) <- paste0("params", 1:2)
out
# params1 params2
#[1,] 11 19
#[2,] 14 24
#[3,] 17 29发布于 2022-04-25 21:12:17
@markus提供了一个优雅的基于矩阵的解决方案,但是(根据问题标题)我正在寻找一个purrr-based解决方案。我还没有找到一个,但是我确实有一个tidyverse中的解决方案
library(tidyverse)
parameters %>%
mutate(params = row_number()) %>%
crossing(coefficients) %>%
mutate(output = a + b_w*w + b_x*x) %>%
select(params, output) %>%
pivot_wider(names_from = params,
names_prefix = "params",
values_from = output,
values_fn = list) %>%
unnest(cols = everything())https://stackoverflow.com/questions/72005005
复制相似问题