我正在尝试创建一个函数,对数据框中的特定列执行多个统计测试。有些测试需要多个级别。我想测试特定列中有多少级别,但似乎无法正确使用。
在我的实际代码中,此部分后面会有一个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。
答案 0 :(得分:3)
您的代码无效的一个原因是data_f$A
不是该函数可用的任何对象的名称。
但我建议你甚至不要尝试将代码解析为字符串。这是错误的做法。您只需要双括号索引[[
。因此,函数体可以是以下单行:
nlevels(data_f[[column]])
对于所有列:
sapply(data_f, nlevels)