Мне нужно взять data.frame
и экспортировать его в файл CSV (или что-то еще, но CSV выглядит как самый простой, хорошо сформированный формат), поэтому я могу импортировать его в базу данных SQLite.
Однако, похоже, что write.csv()
требует, чтобы я написал строку заголовка, а команда SQLite .import
требует, чтобы я не имел строку заголовка. Так что немного несоответствия.
Вот что произойдет, если я попытаюсь опустить строку заголовка:
> write.csv(mydf, "/tmp/mydf.csv", row.names=F, col.names=F)
Warning message:
In write.csv(mydf, "/tmp/mydf.csv", row.names = F, col.names = F) :
attempt to set 'col.names' ignored
Мне нужно задаться вопросом, почему это в первую очередь - в руководстве сказано: "Эти обертки преднамеренно негибкие: они предназначены для обеспечения правильности использования условных условных обозначений для действительного файла. Попытка изменить append
, col.names
, sep
, dec
или qmethod
игнорируются с предупреждением." Но я ничего не знаю в спецификации или в других местах, где требуются имена столбцов. Действительно, большинство инструментов (Excel и т.д.) Не относятся к ним специально.
Если вы не можете победить, присоединитесь к ним.
Если вы переключитесь на write.table()
(какие write.csv()
вызовы в любом случае), вы будете золотыми:
R> write.table(trees, file="/tmp/trees.csv",
+ row.names=FALSE, col.names=FALSE, sep=",")
R> system("head /tmp/trees.csv")
8.3,70,10.3
8.6,65,10.3
8.8,63,10.2
10.5,72,16.4
10.7,81,18.8
10.8,83,19.7
11,66,15.6
11,75,18.2
11.1,80,22.6
11.2,75,19.9
R>
Вы можете напрямую импортировать его в SQLite. Следующий импорт встроенного фрейма данных BOD
в базу данных SQLite my.db
(создание my.db
, если оно еще не существует).
library(RSQLite)
con <- dbConnect(SQLite(), dbname = "my.db")
dbWriteTable(con, "BOD", BOD, row.names = FALSE)
dbDisconnect(con)
Используйте write.table() вместо этого так:
write.table(mydf, "/tmp/mydf.csv", row.names=F, col.names=F, sep=",")
write.csv()
имеет дело со всеми особенностями формата CSV, но, возможно, я подумаю об этом в другой день.