多个列表函数转换为R中的dplyr

vmdwslir  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(99)

我有下面的代码,其中我有三个列表,我试图计算MSE。

seg_mean <- list(c(3.5,2.5),c(6.5,5.5),c(9.2,8.8),c(5.3,4.7))
mean_tot <- list(c(3,3),c(6,6),c(9,9),c(5,5))
seg_len <- list(20,18,17,15)

MSE <- mapply('-', seg_mean, mean_tot, SIMPLIFY = FALSE) #element wise difference between seg_mean and mean_tot
MSE <- lapply(MSE, function(x) x^2) #element wise squaring
MSE <- mapply('/', MSE, seg_len, SIMPLIFY = FALSE) #dividing each list element by seg_len

这是可行的。我的问题是,通过使用R中的dplyr包中的%>%,是否可以使这些代码行变得更简单?我不确定它将如何工作,但我希望它看起来像

MSE <- mapply('-', seg_mean, mean_tot, SIMPLIFY = FALSE) %>% lapply(function(x) x^2) %>% mapply('/', seg_len, SIMPLIFY = FALSE)
qij5mzcb

qij5mzcb1#

使用|>(base R的原生管道),您可以执行以下操作:

mapply('-', seg_mean, mean_tot, SIMPLIFY = FALSE) |>
  lapply(function(x) x^2) |>
  mapply(FUN = '/', seg_len, SIMPLIFY = FALSE)

它也适用于%>%,不同之处在于第二个mapply,其中需要指定第一个参数,否则它将被解释为mapply(., '/', seg_len, ...)而不是mapply('/', ., seg_len, ...)

相关问题