2013-02-24 5 views
2

Я пытаюсь использовать команду read.csv(), но я не понимаю часть colClasses для запуска кодирования. Кто-нибудь объясняет, что это такое, а также дать мне пример простой кодировки для read.csv()?read.csv() и colClasses

Кроме того, если я бегу мое кодирование для read.csv(), я получаю сообщение об ошибке

> object of type 'closure' is not subsettable 

Какой тип ошибки это? В прошлый раз, когда я запускаю свой код, он работал, но теперь я получаю это. Я не уверен, какое изменение я должен сделать здесь. Это мой код:

Precipfiles[1:24] <- list.files(pattern=".csv") 
> DF <- NULL 
> for (f in Precipfiles[1:24]) { 
    data[1:24]<-read.csv(f,header=T,sep="\t",na.string="",colClasses="character") 
    DF[1:24]<-rbind(DF,data[1:24]) 
} 

В принципе, я загрузить все данные и поместить их вместе, но я не в состоянии использовать merge() команды, так как я, имеющие проблемы я перечислил выше.

Я думаю, что я не должен использовать colClasses="character", потому что данные, которые я использую, являются числовыми в матрице 200 на 200. Есть 24 файла данных, которые мне нужно собрать вместе.

Если у вас есть предложения и рекомендации по улучшению этого кодирования, пожалуйста, дайте мне знать. Спасибо за вашу помощь.

+1

Попробуйте удалить все '[1:24]' индексы – Rcoster

+2

Возможная публикация http://stackoverflow.com/questions/11308367/object-of-type-closure-is-not-subsettable – EDi

+1

Было бы интересно собрать на SO вопросы, которые связаны для использования общих имен функций в качестве переменных. 'data',' df' и т. д. –

ответ

5

Вам действительно не нужно [1:24] в каждом задании, это то, что вызывает проблемы. Вы назначаете подмножество индексированного вектора некоторого описания.

сообщение об ошибке, когда пытаются присвоить data[1:24], без data быть назначены ранее (в вашем предыдущем использовании (которые вы упомянули работали), data был, вероятно, list или data.frame вы создали.). Таким образом data функция (для загрузки данных, связанных с пакетами, см ?data) и ошибка, которую вы видели, говорит, что (функция включает в себя замыкание)

Я хотел бы предложить что-то вроде

Precipfiles <- list.files(pattern=".csv") 
DFlist <- lapply(Precipfiles, read.table, sep = '\t', 
        na.string = '', header = TRUE) 
bigDF <- do.call(rbind, DFlist) 

# or, much faster using data.table 
library(data.table) 
bigDF <- rbindlist(DFlist) 
+0

Никогда не думал об использовании 'rbindlist' в data.frames. +1! –

+0

mnel, я попробовал ваш код, и он намного быстрее, несколько. Благодарим вас за помощь и советы. Я думал, что без [1:24] файлы становятся одним большим файлом, и я не могу назвать один конкретный номер из одного конкретного файла данных. – 2013-02-25 20:29:13

+0

Ricardo Saporta, Почему я не должен использовать rbindlist для data.frames? – 2013-02-25 20:30:40

Смежные вопросы