与多个函数输入一起使用而不嵌套

问题描述 投票:0回答:1

我有一个包含四列的数据框:两列表示参加一项运动,而另两列表示运动员是否通过了两次体检。

dat <- data.frame(SOCCER = sample(0:1, 10, replace = T),
                  BASEBALL = sample(0:1, 10, replace = T),
                  TEST_1_PASS = sample(0:1, 10, replace = T),
                  TEST_2_PASS = sample(0:1, 10, replace = T))

我想获取一个包含每种运动和考试的意外事件表的列表。我知道我可以使用以下代码来完成此操作,该代码使用嵌套的lapply语句,但这使我感到效率低下。任何人都可以提出一种不使用嵌套的更优雅的解决方案吗?

results <- lapply(c("SOCCER", "BASEBALL"), function(x) {
  lapply(c("TEST_1_PASS", "TEST_2_PASS"), function(y){
    table(sport = dat[[x]], pass = dat[[y]])
  })
})

一如既往的感谢!

r lapply
1个回答
0
投票

double lapply获取每个列向量中列的所有成对组合,就像@Gregor在评论中写的那样

我认为您的嵌套效率不高...您需要调用表4次。这是否在一个循环内/套用并不重要4个项目或2个嵌套循环/重叠,每个都有2个项目。

但是这是另一种方式,其中一个循环变相为expand.grid

cols <- expand.grid(x = c("SOCCER", "BASEBALL"), 
                    y = c("TEST_1_PASS", "TEST_2_PASS"),
                    stringsAsFactors = FALSE)
Map(function(.x, .y)table(dat[[.x]], dat[[.y]]), cols$x, cols$y)
© www.soinside.com 2019 - 2024. All rights reserved.