从R中函数内的列中检索因子级别的数量

时间:2017-07-23 19:55:34

标签: r function

我正在尝试创建一个函数,对数据框中的特定列执行多个统计测试。有些测试需要多个级别。我想测试特定列中有多少级别,但似乎无法正确使用。

在我的实际代码中,此部分后面会有一个ifelse,它返回一个字符串,表示只有一个级别'如果单个,或继续进行统计测试,如果> 1。

require("dplyr")
df <- data.frame(A = c("a", "b", "c"), B = c("a", "a", "a"), C = c("a", "b", "b")) %>%
    mutate(A = factor(A)) %>%
    mutate(B = factor(B)) %>%
    mutate(C = factor(C))

my_funct <- function(data_f, column){

    n_fact <- paste("data_f", column, sep = "$")

    n_levels <- do.call("nlevels",
                        list(x = as.name(n_fact)))
    print(n_levels)
}

```

然后我用数据框和列

调用我的函数
my_funct(df, "A")

我收到以下错误: 级别错误(x):object&#39; data_f $ A&#39;找不到

如果删除as.name()包装器,则返回值0。

1 个答案:

答案 0 :(得分:3)

您的代码无效的一个原因是data_f$A不是该函数可用的任何对象的名称。

但我建议你甚至不要尝试将代码解析为字符串。这是错误的做法。您只需要双括号索引[[。因此,函数体可以是以下单行:

nlevels(data_f[[column]])

对于所有列:

sapply(data_f, nlevels)