2014-10-08 122 views
2

我不知道为什么as.factor功能在通过apply功能应用于R时不起作用?为什么`as.factor`在通过R中的apply函数应用时不起作用?

> df.nrow <- 10 
> df <- data.frame(col1=sample(c("a","b","c"), df.nrow, TRUE), 
+     col2=sample(c("d","e","f"), df.nrow, TRUE), 
+     col3=sample(c("g","h","i"), df.nrow, TRUE)) 
> apply(df, 2, is.factor) 
col1 col2 col3 
FALSE FALSE FALSE 
> df <- apply(df, 2, as.factor) 
> apply(df, 2, is.factor) 
col1 col2 col3 
FALSE FALSE FALSE 
+0

@isomorphismes - 除非您向[as.factor]添加标签说明,否则请停止添加标签。现在它没有任何意义,也没有任何人帮助。 – 2014-10-14 22:01:58

+0

@RichardScriven我已经添加了一个。但它可能尚未获得批准。 – isomorphismes 2014-10-14 22:27:17

+0

@isomorphismes不要为任意函数添加标签。那种方式就是疯狂。如果问题的根本原因是因素,您可以考虑添加已有的r因子标签。 – joran 2014-10-14 22:36:53

回答

5

我想这是因为apply如何简化返回矩阵的结果。从?apply

If ‘X’ is not an array but an object of a class with a non-null 
    ‘dim’ value (such as a data frame), ‘apply’ attempts to coerce it 
    to an array via ‘as.matrix’ if it is two-dimensional (e.g., a data 
    frame) or via ‘as.array’. 

事实上,您的原始数据框是如你所愿。尝试使用str(df)sapply(df, is.factor)来验证它。除非stringsAsFactors=FALSE,基本上字符向量总是被强迫因素。

+0

恐怕它不工作(只是检查出来)。 – 2014-10-08 10:48:30

+1

如果您的方式检查不起作用的因素。你可以使用'sapply(df,is.factor)' – konvas 2014-10-08 10:52:15

+0

该死的,你是对的! :)我真的很抱歉我的疏忽! – 2014-10-08 10:54:34

相关问题