2012-10-29 16 views
1

我已經把它縮小到一個非常小的例子,所以我確定它非常愚蠢。爲什麼在我指定它時不會將它讀作數字?

我有一個文件test.delete這些內容:

Rock,bird 
1350909372121900000,55.20000 
1350909372318100000,55.30000 
1350909382020900000,55.20000 
1350909382029600000,55.20000 
1350909384311100000,55.20000 

,然後我做的:

test = read.csv('test.delete', colClasses=c('character','numeric')) 

但所有列似乎讀取爲字符:

> apply(test, 2, class) 
     Rock  bird 
"character" "character" 

爲什麼是這樣?

+2

從'?apply':「如果X不是一個數組,而是一個具有非空dim值的類的對象(如數據框),則嘗試通過as.matrix將它強制轉換爲數組if它是二維的(例如,一個數據幀)或通過as.array。「 – joran

回答

4

read.csv正如你所願地工作。你在這裏誤用了apply

如果您對導入的數據運行str,則應該看到其他變量是數字。但是當你調用apply時,數據幀被強制爲一個只處理一種數據類型的矩陣,並且所有內容都被強制轉換爲字符。

作爲檢查列類的更安全的方法是使用lapply,因爲data.frame實際上是一個列表。

+0

我一直在使用sapply(名字(dat),函數(x)類(dat $ x))''。但是「薩普利(dat,class)'更清潔。 D'哦。 –

相關問題