You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用apply或sapply替代crosstab的row.vars参数生成交叉表

解决crosstab结合apply/sapply的替代实现问题

首先修正你的数据类型转换代码——用apply处理后会把tibble转为矩阵,后续可能引发问题,推荐用dplyr的across来批量转换列类型:

library(dplyr)
library(gtsummary)
mtcars <- mtcars %>% 
  as_tibble() %>% 
  mutate(across(c(vs, am), as.character))

你之前的apply写法错误在于:直接传入crosstab(mtcars, row.vars = c('vs', 'am'))会立即执行该函数,而非将其作为循环调用的逻辑。正确的做法是用匿名函数循环指定的变量名,将每个变量名传入crosstab的row.vars参数,推荐用sapply或lapply实现:

方法1:用sapply生成命名列表结果

# 定义要生成交叉表的变量向量
target_vars <- c("vs", "am")

# 循环生成交叉表,结果为命名列表
cross_tab_list <- sapply(target_vars, function(var) {
  crosstab(mtcars, row.vars = var)
}, simplify = FALSE)

# 调用单个结果
cross_tab_list$vs
cross_tab_list$am

方法2:用lapply实现(结果为列表,与sapply加simplify=FALSE等价)

cross_tab_list <- lapply(target_vars, function(var) {
  crosstab(mtcars, row.vars = var)
})

# 可手动命名列表
names(cross_tab_list) <- target_vars

核心逻辑是:循环的是变量名而非列数据,通过匿名函数将每个变量名传递给crosstab的row.vars参数,实现与单独调用crosstab(mtcars, row.vars = "vs")和crosstab(mtcars, row.vars = "am")完全一致的效果。

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:00:25