r - 将公式传递给R中的函数?

标签 r function formula survey

任何帮助,将不胜感激。我正在使用Lumley调查软件包,并试图简化我的代码,但是遇到了一些小问题。

程序包中的svymean函数在我的代码中按以下方式调用,其中第一个参数是指示我想要哪些变量的公式,第二个参数是该数据集:

svymean(~hq_ehla, FraSvy, na.rm=TRUE)

我正在尝试创建一个函数,该函数将提取分类变量的均值(比例)和标准误,因此,我制作了以下函数:
stats <- function(repstat, num) {
    estmean <- as.numeric(round(100 * repstat[num], digits=0))
    estse <- round(100 * sqrt(attributes(repstat)$var[num,num]), digits=1)
    return(list(mean=estmean, se=estse))
}

这是可行的,因此,例如,当我提取第一类的均值和se时,我使用:
stats(svymean(~hq_ehla, FraSvy, na.rm=TRUE), 1)$mean
stats(svymean(~hq_ehla, FraSvy, na.rm=TRUE), 1)$se

我想做的就是将其简化为更短的内容,也许我只需要写:
stats(FraSvy, "hq_ehla", 1)$mean

或类似的东西。问题是我不知道如何使用变量名将公式传递给函数。

最佳答案

您可以使用reformulate构造公式并在函数中调用svymean。使用...na.rm或其他参数传递给svymean

stats <- function(terms, data,  num, ...) {
  .formula <- reformulate(terms)
  repstat <- svymean(.formula, data, ...)
  estmean <- as.numeric(round(100 * repstat[num], digits=0))
  estse <- round(100 * sqrt(attributes(repstat)$var[num,num]), digits=1)
  return(list(mean=estmean, se=estse))
}

stats(data = FraSvy, terms = "hq_ehla", 1, na.rm = TRUE)$mean

请查看this answer,以了解有关以编程方式创建公式对象的更多详细信息

或者,您可以在函数内传递公式对象。
stats2 <- function(formula, data,  num, ...) {

  repstat <- svymean(formula, data, ...)
  estmean <- as.numeric(round(100 * repstat[num], digits=0))
  estse <- round(100 * sqrt(attributes(repstat)$var[num,num]), digits=1)
  return(list(mean=estmean, se=estse))
}


stats2(data = FraSvy, formula = ~hq_ehla, 1, na.rm = TRUE)$mean

关于r - 将公式传递给R中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678738/

相关文章:

java - 如何在Java中使用方括号进行数学运算?

excel - 每个被叫号码的通话记录明细

r - R : efficiently count number of edges between multiple sets of vertices 中的 igraph

r - setwd()在当前工作目录中

r - 如何根据不同的类别找到多少个唯一值

javascript - 调用 .apply() 后如何保留原始函数的 this 上下文?

jquery将每个元素从选择器传递到函数,制作选择最后一个元素的数组

excel - 在 Excel 中的某些数字后添加逗号

python - 匹配两个文件之间的行并标记匹配的字符串

c - 将结构字段传递给 C 中的函数