2015-07-14 3 views
0

Я не могу создать пример кода, потому что я не совсем уверен, в чем проблема, и моя фактическая проблема довольно востребована. Тем не менее, это похоже на родовую проблему, которую, возможно, кто-то видел раньше.Невозможно записать фрейм данных в базу данных

В основном я построение 3-й различные dataframes и rbinding их вместе, что все как гладко, но когда я пытаюсь написать, что сливался рамка обратно в БД я получаю эту ошибку:

Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, : 
    unimplemented type 'list' in 'EncodeElement' 

I 'пытались вручную принудительно их использовать, используя as.data.frame() до и после rbinds, и возвращаемый объект (тот, который не удается записать с указанным выше сообщением об ошибке) существует в среде как class data.frame, так почему dbWriteTable похоже, нет записки?

Извините, я подключаюсь к базе данных MySQL, используя RMySQL. Проблема, которую я думаю, когда я смотрю немного ближе и пытаюсь объяснить сам, состоит в том, что столбцы моего фрейма данных сами являются списками (одинаковой длины), что sorta имеет смысл ошибки. Я бы подумал (или хотел бы все равно подумать), что вызов as.data.frame() позаботится об этом, но я не думаю?

Часть моей ул(), так как это долго выглядит как:

.. [list output truncated] 
$ stcong   :List of 29809 
..$ : int 3 
..$ : int 8 
..$ : int 4 
..$ : int 2 

Я предполагаю, что я интересно, если есть простой способ заставить это принуждение?

+0

Вам необходимо предоставить (по крайней мере) db, к которому вы подключаетесь (MySQL, SQLite и т. Д.), И как (RODBC, RMySQL, RSQLite и т. Д.) И результаты 'str()' в вашем кадре данных. – joran

+0

Без воспроизводимого примера или, по крайней мере, кода, который вы используете, это вызывает у вас ошибку, было бы довольно далеко, чтобы ожидать ответа. Подумайте о том, чтобы инвестировать некоторое время в улучшение вашего вопроса, чтобы мы могли хотя бы дать обоснованное предположение. –

+0

Угадайте: у вас есть столбец в вашем фрейме данных, который не является простым числовым, символьным, логическим или значением даты. Интерфейс DB проверяет тип столбца, чтобы выяснить, как его хранить в БД. Ошибка выглядит так, что она нашла список в виде столбца, который является законным в R, но DB идет «wtf?». Что выглядит 'summary (dataframeyouarewritingtoDB)'? – Spacedman

ответ

1

Трудно сказать наверняка, так как вы предоставили так мало конкретной информации, но это будет один способ преобразовать столбец списка атомному вектора колонки:

> d <- data.frame(x = 1:5) 
> d$y <- as.list(letters[1:5]) 
> str(d) 
'data.frame': 5 obs. of 2 variables: 
$ x: int 1 2 3 4 5 
$ y:List of 5 
    ..$ : chr "a" 
    ..$ : chr "b" 
    ..$ : chr "c" 
    ..$ : chr "d" 
    ..$ : chr "e" 
> d$y <- unlist(d$y) 
> str(d) 
'data.frame': 5 obs. of 2 variables: 
$ x: int 1 2 3 4 5 
$ y: chr "a" "b" "c" "d" ... 

Это предполагает, что каждый элемент в списке столбец - это только один вектор длины. Если это не так, все будет сложнее, и вам, вероятно, потребуется переосмыслить структуру данных.

+0

Спасибо, что делает то, что я хотел, даже если он немного длиннее, чем я надеялся. Я должен учить свой урок, поскольку все мои попытки динамического построения структур данных в R, похоже, заканчиваются аналогичным образом. –

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