如何正确地将monet.frame子集为%in%

如何正确地将monet.frame子集为%in%,r,monetdb,R,Monetdb,看来一切都好,如果 subset(mdf, id %in% c("A","B")) 但如果 ids = c("A","B") subset(mdf,id %in% ids) 以下是演示代码: con1 = dbConnect(dbDriver("MonetDB"),"monetdb://go:50000/voc") d = data.frame(id=base::sample(c("A","B","C","D"),100,replace=T),v=sample(1:10,100,replac

看来一切都好,如果

subset(mdf, id %in% c("A","B"))
但如果

ids = c("A","B")
subset(mdf,id %in% ids)
以下是演示代码:

con1 = dbConnect(dbDriver("MonetDB"),"monetdb://go:50000/voc")
d = data.frame(id=base::sample(c("A","B","C","D"),100,replace=T),v=sample(1:10,100,replace=T),stringsAsFactors=F)
head(d)
str(d)

dbWriteTable(con1, "test", d)

mdf <- monet.frame(con1,"test")
subset(mdf, id %in% c("A","B"))

ids = c("A","B")
subset(mdf,id %in% ids)
的错误消息
IDS=c(“A”、“B”)
子集(mdf,id%在%id中)

有点像:

Error in .local(conn, statement, ...) : 
  Unable to execute statement 'SELECT COUNT(*) FROM test WHERE ( (id IN 'AB') ) '.
Server says 'syntax error, unexpected STRING, expecting '(' in: "select count(*) from test where ( (id in 'AB'"' [#42000].
我想这是一个具体的问题。只是不知道如何规避它


谢谢。

首先,感谢通过合作在这里生成的非常好的bug报告。我以前遇到过这个问题,它应该在R-Forge()上提供的包的0.8.1版本中修复。

作为第一步,这看起来是特定于
MonetDB.R
包的
monet.frame
对象的。我无法使用标准的
data.frame
复制错误。另外,为什么不直接使用
mdf[mdf$id%in%ids,]
并避免
子集的已知问题?
ids
可能是对象的另一列或其环境中的某个内容的名称。尝试使用
IDS,谢谢@thelatemail。是的,它特定于MonetDB.R,因为monet.frame是由MonetDB.R定义的
mdf[mdf$id%在%ids中,]
在这种情况下仍然返回错误。我在这里没有使用BaseR数据帧技巧的原因是,底层数据至少有数百万行。MonetDB.R可以非常快速有效地检索相关的最终结果,并且在R中占用的内存很小。什么样的错误?请编辑您的问题。谢谢@flodel。尝试了
idssho谢@Hannes。0.8.1简化了子集设置。非常感谢MonetDB.R,使用它,R用户可以轻松地拥有比kdb+更快的数据库后端。(速度比较仅根据我自己的经验)。
Error in .local(conn, statement, ...) : 
  Unable to execute statement 'SELECT COUNT(*) FROM test WHERE ( (id IN 'AB') ) '.
Server says 'syntax error, unexpected STRING, expecting '(' in: "select count(*) from test where ( (id in 'AB'"' [#42000].