R 相关 - 如何使用 lapply 和列表在 r 中循环自定义函数?

R related - How to use lapply and list to loop a customized function in r?

这里是新手,想在 r 中寻求一些指导。

我有如下数据集

df <- data.frame (ID = c(1:10),
                  Term30 = c(0,0,0,0,0,0,1,1,1,0),
                  Term60 = c(0,0,0,0,0,1,1,1,NA,1),
                  Term90 = c(0,0,0,0,1,1,1,NA,NA,1),
                  Rec = c(3,3,3,3,3,2,2,1,1,1)
                  )

...我创建了下面的函数来总结我需要的结果。

termfun <- function(term){
  df %>% 
    drop_na()%>%
    tabyl(Rec,
          {{term}})%>%
    adorn_totals(c("row","col"))%>%
    adorn_percentages("row") %>%  #can be "row", "col", or "all"
    adorn_pct_formatting( digits = 2) %>%
    adorn_ns() %>%
    adorn_title("combined")%>%
    knitr::kable()
}

我试着用下面的列表循环这个函数,但它没有用。

termlist <- list("Term30","Term60","Term90")
lapply(termlist, termfun)

下面是我收到的消息

Error: Can't extract columns that don't exist.
x Column `Term30` doesn't exist.
Run `rlang::last_error()` to see where the error occurred. 

有人 insights/recommendations 告诉我如何使循环有效吗?

非常感谢!

更改函数以使用 .data 而不是 {{}}

library(janitor)
library(dplyr)

termfun <- function(term){
  df %>% 
    drop_na()%>%
    tabyl(Rec,
          .data[[term]])%>%
    adorn_totals(c("row","col"))%>%
    adorn_percentages("row") %>%  #can be "row", "col", or "all"
    adorn_pct_formatting( digits = 2) %>%
    adorn_ns() %>%
    adorn_title("combined")%>%
    knitr::kable()
}

termlist <- c("Term30","Term60","Term90")
lapply(termlist, termfun)

[[1]]


|Rec/Term30 |0           |1          |Total       |
|:----------|:-----------|:----------|:-----------|
|1          |100.00% (1) |0.00% (0)  |100.00% (1) |
|2          |50.00% (1)  |50.00% (1) |100.00% (2) |
|3          |100.00% (5) |0.00% (0)  |100.00% (5) |
|Total      |87.50% (7)  |12.50% (1) |100.00% (8) |

[[2]]


|Rec/Term60 |0           |1           |Total       |
|:----------|:-----------|:-----------|:-----------|
|1          |0.00% (0)   |100.00% (1) |100.00% (1) |
|2          |0.00% (0)   |100.00% (2) |100.00% (2) |
|3          |100.00% (5) |0.00% (0)   |100.00% (5) |
|Total      |62.50% (5)  |37.50% (3)  |100.00% (8) |

[[3]]


|Rec/Term90 |0          |1           |Total       |
|:----------|:----------|:-----------|:-----------|
|1          |0.00% (0)  |100.00% (1) |100.00% (1) |
|2          |0.00% (0)  |100.00% (2) |100.00% (2) |
|3          |80.00% (4) |20.00% (1)  |100.00% (5) |
|Total      |50.00% (4) |50.00% (4)  |100.00% (8) |