r - 在 R 函数中打印列的文字名称?
问题描述
我对 R 比较陌生,并试图创建一个函数来应用于我想为其生成频率表的变量名列表。但是,我编写的函数会打印函数的局部变量名称,而不是变量的实际名称。
create_tabyls <- function(df,col_name) {
result <- tabyl(df[[col_name]]) %>%
adorn_pct_formatting() %>%
adorn_totals()
print(result)
}
然后当我调用我的函数时:
create_tabyls(df,'AGE')
我得到:
df[[col_name]] n percent valid_percent
1 43141 3.5% 3.7%
2 810172 66.4% 69.7%
3 309058 25.3% 26.6%
<NA> 57246 4.7% -
Total 1219617 - -
我不明白为什么我的输出打印为 df[[col_name]] 而不是 df[[AGE]]。谁能帮我弄清楚我犯了什么错误?我试图让它打印我给函数的实际值,而不仅仅是打印函数变量的名称。
谢谢你的帮助!
解决方案
我们可以转换为sym
bol 并评估 ( !!
),因为输入是一个字符串
library(janitor)
library(dplyr)
create_tabyls <- function(df,col_name) {
df %>%
select(col_name) %>%
tabyl(!! rlang::sym(col_name)) %>%
adorn_pct_formatting() %>%
adorn_totals()
}
-测试
data(mtcars)
mtcars$vs <- as.character(mtcars$vs)
create_tabyls(mtcars, 'vs')
# vs n percent
# 0 18 56.2%
# 1 14 43.8%
# Total 32 -
或者,如果我们使用不带引号的列名作为输入,那么我们可以使用 curly-curly 运算符 ( {{}}
)
create_tabyls <- function(df,col_name) {
df %>%
tabyl({{col_name}}) %>%
adorn_pct_formatting() %>%
adorn_totals()
}
create_tabyls(mtcars, vs)
# vs n percent
# 0 18 56.2%
# 1 14 43.8%
# Total 32 -
或者,如果我们需要两个选项,即字符串或不带引号的名称,那么ensym
使用!!
create_tabyls <- function(df,col_name) {
df %>%
tabyl(!! rlang::ensym(col_name)) %>%
adorn_pct_formatting() %>%
adorn_totals()
}
create_tabyls(mtcars, 'vs')
create_tabyls(mtcars, vs)
推荐阅读
- amazon-web-services - 无法连接到 AWS EC2 实例 - 连接被拒绝
- python - 将 logging.debug 保存在变量中或一一发送
- javascript - 解析一个数字,但将负数保留在文本框中
- html - 如何在使用 CSS 时为背景 URL 图像设置负边距?
- python - 类型检查通用数据类时出现不兼容的类型错误
- javascript - 在反应原生博览会中测量分贝
- elasticsearch - Kibana 7.14 | 日期格式 - 是否可以以 Epoch 格式存储日期,但在 Kibana 搜索查询中以 ISO 日期格式显示它
- node.js - 庆祝中间件快递 - NodeJS - 不适用于完整模式
- django - Django-CMS 将内容添加到第一页
- regex - 正则表达式匹配字符串,除了最后四个字符和回车换行符