R语言pollster包crosstab函数循环内外表现差异的原因咨询
问题原因
pollster::crosstab函数采用**非标准求值(NSE)**逻辑,它要求直接传入数据框内的变量名(无需加引号),而非字符串形式的变量名。
循环中你传入的i是字符串"maritalstatus",函数不会自动将其解析为数据框的列,而是把它当作一个固定的字面量值——相当于每一行的这个"变量"都是同一个字符串,因此每个educ6分组里这个单一值的占比必然是100%,最终仅保留了样本量(n列)的有效信息。
解决办法
需要把字符串形式的变量名转换成R可识别的变量符号,这里用rlang包的工具实现(pollster依赖tidyverse生态,rlang通常已默认安装):
library(pollster) library(rlang) loop_vars <- c("maritalstatus") for(i in loop_vars){ xtab2 <- illinois |> crosstab(educ6, !!sym(i), weight = weight) } xtab2
sym(i):将字符串i转换为对应的变量符号!!:把转换后的符号注入到crosstab参数中,让函数识别为数据框的目标列
你也可以用get()函数直接提取列,写法更简洁:
for(i in loop_vars){ xtab2 <- illinois |> crosstab(educ6, get(i), weight = weight) }
内容的提问来源于stack exchange,提问作者Ella Wind
相关产品推荐
相关产品推荐

