无法将数据帧写入数据库

时间:2015-07-14 16:19:31

标签: r database

我无法真正创建代码示例,因为我不太确定问题是什么,而我的实际问题是相关的。这说它似乎是一个普通的问题,可能是以前见过的人。

基本上我正在构建3个不同的数据帧并将它们组合在一起,这是所有预期的顺利航行但是当我尝试将该合并帧写回DB时我得到了这个错误:

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

我尝试在rbinds之前和之后使用as.data.frame()手动强制它们,并且返回的对象(与上述错误消息无法写入的对象)在环境中作为类data.frame存在那么为什么dbWriteTable似乎没有备忘录?

抱歉,我正在使用RMySQL连接到MySQL数据库。我认为当我看起来更接近并试图解释自己的问题是我的数据框的列本身是列表(具有相同的长度),这可以理解错误。我想(或者想要反思)调用as.data.frame()可以解决这个问题,但我猜不是吗?

我的str()的一部分,因为它看起来很像:

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

我想我想知道是否有一种简单的方法来强迫这种强制?

1 个答案:

答案 0 :(得分:2)

很难说,因为您提供了如此少的具体信息,但这是将列表列转换为原子向量列的一种方法:

> 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" ...

这假设列表列的每个元素只是一个长度为一个向量。如果没有,事情会更复杂,你可能需要重新考虑你的数据结构。