【发布时间】:2014-03-14 03:52:37
【问题描述】:
dbGetQuery 是RMongo 中的 S4 泛型。它被声明为
dbGetQuery(rmongo.object, collection, query, skip=0, limit=1000)
在 R 中使用这样的函数,skip 和 limit 是可选参数。但是,当我以这种方式调用它时
dbGetQuery(mongo, 'changesPerTypeEpoch', '{}', limit=10000)
我收到一个错误:
(函数(类、fdef、mtable)中的错误:
无法为签名“RMongo”、“character”、“character”、“missing”、“numeric”'找到函数“dbGetQuery”的继承方法
查看源代码,发现泛型定义了两个签名:
signature(rmongo.object="RMongo", collection="character", query="character", skip='numeric', limit='numeric')
signature(rmongo.object="RMongo", collection="character", query="character", skip='missing', limit='missing')
所以为了让它在不通过skip的情况下工作,它需要有另一个签名:
signature(rmongo.object="RMongo", collection="character", query="character", skip='missing', limit='numeric')
但是,这让我感到不舒服,因为为了在 S4 泛型中创建 n 可选参数,必须定义 2^n 个签名。有没有更好的方法在 S4 泛型中定义可选参数?
【问题讨论】:
-
当您调用
RSQLite版本的dbGetQuery时也会出现此错误。我提到这一点是因为谷歌在搜索此错误时会返回此答案。要确定这是否是您的问题,请运行find('dbGetQuery'),如果您看到多个结果,您可以通过为其命名空间添加前缀来指定 Mongo 函数,即RMongo::dbGetQuery(...)