r语言 - 查找写入函数中的错误:在新写入的函数中使用数据帧列名



更新:我特别想了解我写的函数是错误的。

我正在使用express包跨多个响应变量运行频率表,并且必须跨多个列重复此代码。我试着写一个函数来简化这个过程,但是遇到了问题。

这是一个非常简化的版本的代码和数据-但希望能帮助我找出什么是错的

例子df

example <- data.frame(org = c("A", "B", "C", "D", "E", "F", "G"),
q1 = c("apple", "apple", NA, "apple", "apple", "apple", NA),
q2 = c(NA, NA, NA, "banana", "banana", "banana", NA),
q3 = c("orange", NA, "orange", "orange", NA, "orange", NA),
region = c("1", "1", "2", "3", "3", "2", "2"))

我成功运行这个数据的方式,我想把它变成一个函数:

library(dplyr)
library(expss)
#find frequencies for state
pct_tot <- as.data.frame(cross_cpct(example, mrset(q1 %to% q3)))
#find frequencies by region
pct_all <- as.data.frame(cross_cpct(example, mrset(q1 %to% q3), region)) %>%
#combine state and region into same table
left_join(pct_tot, by = "row_labels")
下面是我写的函数:
mr_freq_1 <- function(df, a, b, region) {
#percent tables
#tables statewide
pct_tot <- as.data.frame(cross_cpct(df, mrset(a %to% b)))
#tables by region and combined with statewide
pct_all <- as.data.frame(cross_cpct(df, mrset(a %to% b), 
region)) %>%
left_join(pct_tot, by = "row_labels")
}

我试过调用这个函数,并在所有这些方面得到错误:

mr_freq_1(example, example$q1, example$q3, example$region)
mr_freq_1(example, q1, q3, region)
mr_freq_1(example, "q1", "q3", "region")

我在阅读了更多关于这一点后重写了函数,仍然有错误。下面是重写后的代码:

mr_freq_2 <- function(df, a, b, region) {
#percent tables
#tables statewide
pct_tot <- as.data.frame(cross_cpct(df, mrset(df[[a]] %to% df[[b]])))
#tables by region and combined with statewide
pct_all <- as.data.frame(cross_cpct(df, mrset(df[[a]] %to% df[[b]]), 
df[[region]])) %>%
left_join(pct_tot, by = "row_labels")
}

cross_cpct使用非标准求值,因此通常的函数参数在这里不起作用。在我看来,修复它的最简单的方法是使用eval.parent(substitute({...})):

mr_freq <- function(df, a, b, region) {
#percent tables
eval.parent(substitute({
#tables statewide
pct_tot <- as.data.frame(cross_cpct(df, mrset(a %to% b)))
#tables by region and combined with statewide
pct_all <- as.data.frame(cross_cpct(df, mrset(a %to% b), 
region)) %>%
left_join(pct_tot, by = "row_labels")

pct_all
}))
}

mr_freq(example, q1, q3, region)

最新更新