关于函数内部 tbl_uvregression 函数中 Y 参数的问题

Posted

技术标签:

【中文标题】关于函数内部 tbl_uvregression 函数中 Y 参数的问题【英文标题】:Issue concerning the Y parameter in tbl_uvregression function inside a function 【发布时间】:2021-12-24 14:59:50 【问题描述】:

所以我试图通过自定义函数输入 tbl_uvregression 函数(gt_summary 包)的 Y 参数。这个想法是在我的函数中创建多个 tbl 并返回合并的不同表。

这是我正在使用的代码示例:

#Loading libraries + example dataset from questionr package

library(haven)
library(tidyverse)
library(finalfit)
library(dplyr)
library(survey)
library(srvyr)
library(gtsummary)
library(glue)
library(gt)
library(knitr)
library(questionr)

data(hdv2003)

这是我有问题的部分:

reg_log <- function(dataframew, variables, by) 
  #@param1 : weighted dataframe
  #@param2 : vector containing variables we want in our graph
  #@param3 : the variable or column we want as our Y argument

  Table <- tbl_uvregression(data = dataframew, include = variables, exponentiate = TRUE, method.args = list(family = quasibinomial()), y = by, method = survey::svyglm)
  return(Table)

当我在 reg_log 之外运行此函数时,我没有问题,但似乎在函数内部, tbl_uvregression 的 Y 参数不会评估参数,而是按字面意思阅读。这是我调用函数时遇到的错误:

hdv2003w <- svydesign(ids = ~1, data = hdv2003, weights = ~hdv2003$poids) #setting the survey.design object

reg_log(hdv2003w, c("age", "sexe", "hard.rock", "sport"), "sport")

x 构建模型时出错survey::svyglm(formula = by ~ age, design = ., family = quasibinomial()) 请参阅下面的错误。错误:mutate()model 有问题。 我model = map(...)。 x svyglm.survey.design 中的错误(公式 = 按 ~ 年龄,设计 = 结构(列表(:所有变量必须在设计 = 参数中)

我知道 Y 参数需要不带引号的语法,但即使我使用了替代()函数,它也不起作用。我已经下定决心要使用 switch 功能做出几种可能性,但是如果有人知道如何解决这个问题,那就太棒了。

谢谢。

【问题讨论】:

【参考方案1】:

tbl_uvregression() 函数需要 y= 的不带引号的输入,而不是带有结果名称的字符串。我更新了你的函数来解释字符串输入。

library(gtsummary)
library(questionr)
data(hdv2003)

reg_log <- function(dataframew, variables, by) 
  tbl_uvregression(
    data = dataframew, 
    include = all_of(variables), 
    exponentiate = TRUE, 
    method.args = list(family = quasibinomial()), 
    y = !!rlang::sym(by), 
    method = survey::svyglm
  )


hdv2003w <- survey::svydesign(ids = ~1, data = hdv2003, weights = ~hdv2003$poids) #setting the survey.design object

tbl <- 
  reg_log(hdv2003w, c("age", "sexe", "hard.rock"), "sport")

由reprex package (v2.0.1) 于 2021 年 11 月 12 日创建

【讨论】:

有效!非常感谢!

以上是关于关于函数内部 tbl_uvregression 函数中 Y 参数的问题的主要内容,如果未能解决你的问题,请参考以下文章

一个关于调用函数函参写void的错误error C2143 syntax error missing ')' before 'type'

内部分享《JVM函数式编程》

内部函数能够访问外部函数的局部变量,这个特性是闭包(Closure)编程的基础

闭包和立即执行函数

JS中的闭包

泛函编程(14)-try to map them all