r - 计算三个列表中的数字并生成一个大列表
问题描述
我需要用 in 中B
的每个数字A
和 inm0
中的公式计算每个数字fun
。通过应用,如果 m0 是单个数字ge <- lapply(B,fun)
,我可以计算每个数字中A
的每个数字。B
如果我现在有多个m0
代码中指定的,我该怎么办?
我认为即使是计算各种但单一的B
,我在一个函数中所做的,然后再次不是一个聪明的方法。A
m0
lapply
lapply
预期的输出是一个列表,其中的值是B
用不同数量的A
和计算的m0
。
这是ge
whenm0
是单个值的结构。
fun <- function (i){
res <- lapply(A, function(x){
g <- as.matrix (m0 * (-x * i))})}
ge <- lapply(B, fun)
m0 <- c(10,20)
A <- c(1,2)
B <- list(per1 = structure(list(t1 = c(1,2), t2 = c(3,4)), row.names = c(NA,
-2L), class = "data.frame"),
per2 = structure(list(t1 = c(10,20), t2 = c(30,40)), row.names = c(NA,
-2L), class = "data.frame"))
解决方案
如果我理解正确的话
根据
m0 <- c(10, 20)
A <- c(1,2)
B <- list(
per1 = structure(list(t1 = c(1, 2), t2 = c(3, 4)),
row.names = c(NA, -2L),
class = "data.frame"
),
per2 = structure(list(t1 = c(10, 20), t2 = c(30, 40)),
row.names = c(NA, -2L),
class = "data.frame"
)
)
fun <- function (i){
lapply(A, function(x){
lapply(m0, function(y) y * (-x * i)
)
}
)
}
lapply(B, fun)
#> $per1
#> $per1[[1]]
#> $per1[[1]][[1]]
#> t1 t2
#> 1 -10 -30
#> 2 -20 -40
#>
#> $per1[[1]][[2]]
#> t1 t2
#> 1 -20 -60
#> 2 -40 -80
...
由reprex 包于 2021-02-10 创建(v1.0.0)
使用tidyverse 1
library(tidyverse)
m0 <- c(10, 20)
A <- c(1, 2)
B <- list(
per1 = structure(list(t1 = c(1, 2), t2 = c(3, 4)),
row.names = c(NA, -2L),
class = "data.frame"
),
per2 = structure(list(t1 = c(10, 20), t2 = c(30, 40)),
row.names = c(NA, -2L),
class = "data.frame"
)
)
df_expand <- expand_grid(A, m0, B)
fn <- function(A, m0, B) {
m0 * (-A * B)
}
res <- pmap(df_expand, fn)
nm <- with(df_expand, paste0(names(B), "-A", A, "-m0_",m0))
purrr::set_names(res, nm)
#> $`per1-A1-m0_10`
#> t1 t2
#> 1 -10 -30
#> 2 -20 -40
#>
#> $`per2-A1-m0_10`
#> t1 t2
#> 1 -100 -300
#> 2 -200 -400
由reprex 包于 2021-02-10 创建(v1.0.0)
使用tidyverse 2
library(tidyverse)
m0 <- c(10, 20)
A <- c(1, 2)
B <- list(
per1 = structure(list(t1 = c(1, 2), t2 = c(3, 4)),
row.names = c(NA, -2L),
class = "data.frame"
),
per2 = structure(list(t1 = c(10, 20), t2 = c(30, 40)),
row.names = c(NA, -2L),
class = "data.frame"
)
)
map(m0, function(z) map(-A, function(x) map(B, function(y) x * y * z)))
#> [[1]]
#> [[1]][[1]]
#> [[1]][[1]]$per1
#> t1 t2
#> 1 -10 -30
#> 2 -20 -40
#>
#> [[1]][[1]]$per2
#> t1 t2
#> 1 -100 -300
#> 2 -200 -400
由reprex 包于 2021-02-10 创建(v1.0.0)
推荐阅读
- r - 将每个点连接到散点图上的每个点
- scala - Scala:嵌套类型层次结构上的模式匹配
- snowflake-cloud-data-platform - 移动表格并撤销所有权限
- python - 删除所有非字母字符,保留字符串中的空格
- javascript - 存储过程未从 nodejs post api 调用执行
- php - Symfony 4 - DomPdf 在 Heroku 的生产环境中不起作用:奇怪的字符
- wpf - 如何对齐 GridViewColumn 标题?
- python-2.7 - 从长时间戳转换为日期时间
- pythonanywhere - 将照片上传到网站并在烧瓶 python 上提交时出现“未找到”错误
- django - Django prefetch_related