【发布时间】:2017-07-23 19:55:34
【问题描述】:
我正在尝试创建一个函数,该函数对数据框中的特定列执行多项统计测试。有些测试需要不止一个级别。我想测试特定列中有多少级别,但似乎无法正确。
在我的实际代码中,这部分后面会跟一个 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)中的错误:找不到对象'data_f$A'
如果我删除 as.name() 包装器,它会返回值 0。
【问题讨论】:
-
nlevels(df[,match(column, names(df))]) -
完美。想我是过于复杂了。谢谢。
-
我不应该只使用函数内部的 data_f 而不是 df ,所以我只依赖函数上下文中定义的参数吗?或者那没关系。
-
是的,只需在函数内部使用
data_f