在“ factor”或“ as.factor”的情况下,结果不同吗?

时间:2019-04-03 02:25:46

标签: r

我的系统是带有Rstudio 1.1.463的R 3.5.3

按如下所示设置数据框:

df <- data.frame(
    cola = c('a','b','c','d','e','e','1',NA,'c','d'),
    colb = c("A",NA,"C","D",'a','b','c','d','c','d'),stringsAsFactors = FALSE)
cats<-c('a','b','c','d','e','f','1')

然后运行df['cola'] <- lapply(df['cola'], function(x) factor(x,levels=cats,exclude = NULL,ordered = FALSE,nmax=6)),得到预期的结果。

如果基于on this postfactor更改为as.factor ,运行df['cola'] <- lapply(df['cola'], function(x) as.factor(x,levels=cats,exclude = NULL,ordered = FALSE,nmax=6)),将出现如下错误:

Error in as.factor(x, levels = cats, exclude = NULL, ordered = FALSE,  : 
  unused arguments (levels = cats, exclude = NULL, ordered = FALSE, nmax = 6)

出什么问题了?

1 个答案:

答案 0 :(得分:3)

问题如错误消息中所述。您正在传递as.factor不存在的参数。如果您阅读?as.factor,则会看到as.factor的参数仅为xlevelsexcludeorderednmaxfactor而非as.factor的参数。因此,传递不使用的参数会给您带来错误。

如果删除这些参数并运行该函数,则它将正常工作而不会出现任何错误消息。

lapply(df['cola'], function(x) as.factor(x))
#$cola
# [1] a    b    c    d    e    e    1    <NA> c    d   
#Levels: 1 a b c d e

或者只是

lapply(df['cola'], as.factor)

如果您只有一列,则不需要lapply

as.factor(df$cola)