在R中,我有一个向量," myVector",我要插入一列的字符串," myColumn",一个mysql表," myTable& #34 ;.我知道我可以编写sql查询并使用dbSendQuery在R中运行它。所以让我们先找出sql查询。这是一个例子:
myVector = c("hi","I", "am")
让我们在myTable的myColumn列中插入myVector,行号为3到5,这里的sql查询除了我不知道的最后一行之外有效:
UPDATE myTable t JOIN
(SELECT id
FROM myTable tt
LIMIT 3, 3
) tt
ON tt.id = t.id
SET myColumn = myVector;
由于
答案 0 :(得分:1)
我不知道,如果MySQL支持Vector
数据类型,但您可以将表设计为解决方法,其中Vector
可以存储在不同的表中,并且与{{1}有关系} {} myTable
。
这有助于您轻松管理和检索详细信息。因此,假设1-M
是您的表格,并且它的现有设计是:
myTable
所以,你的主表可以是
myTable
-------
id
col1
vectorCol
和将存储您的矢量的表格。
CREATE TABLE myTable (
id INT NOT NULL AUTO_INCREMENT,
col1 varchar(50),
PRIMARY KEY (id)
);
答案 1 :(得分:1)
您应该使用toJSON()
函数将R
向量导出为JSON
,例如:
myJSONVector = toJSON(c("hi","I", "am"))
同时创建或更改myTable
,以便myColumn
具有相应的JSON Data Type
如果值,尝试将值插入JSON列会成功 是一个有效的JSON值,但如果不是,则会失败:
示例
CREATE TABLE `myTable` (`myColumn` JSON);
INSERT INTO `myTable` VALUES(myJSONVector); // will fail if myJSONVector is not valid JSON
// update query would be
UPDATE `myTable` SET `myColumn` = myJSONVector
WHERE `id` IN (3,4,5);
另外
您可以使用函数fromJSON()
从R
创建JSON
向量。
答案 2 :(得分:1)
假设我理解你的问题,我脑子里有两种可能的解决方案:
<强> 1。每个元素一列: 如果您的向量都具有相同数量的元素,则可以将它们中的每一个存储在单独的列中。从上面的示例开始,表格看起来像这样。 (列的大小以及是否允许空值取决于您的数据)
CREATE TABLE `myTable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`element1` varchar(255) DEFAULT NULL,
`element2` varchar(255) DEFAULT NULL,
`element3` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
从上面插入向量的语句是:
INSERT INTO `myTable` (`id`, `element1`, `element2`, `element3`)
VALUES (1, 'hi', 'I', 'am');
根据你的载体有多少元素,这种方法可能或多或少适用。
<强> 2。将矢量存储为blob: 另一种方法可能是将矢量存储为blob。 Blob(二进制大对象)是一种存储可变数量(二进制)数据的数据类型(请参阅:https://dev.mysql.com/doc/refman/5.7/en/blob.html)。这个想法取自本文:http://jfaganuk.github.io/2015/01/12/storing-r-objects-in-sqlite-tables/
可以使用以下语句创建表:
CREATE TABLE `myTable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`myVector` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
插入矢量时,将变量绑定到查询中。由于我不是R专家,因此我会参考本文的实施细节。