【问题标题】:Retrieve number of factor levels from columns within a function in R从R中函数内的列中检索因子级别的数量
【发布时间】: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

标签: r function


【解决方案1】:

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

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

nlevels(data_f[[column]])

对于所有列:

sapply(data_f, nlevels)

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2019-11-19
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多