2014-10-08 123 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

相關問題