dbGetQuery
是RMongo中的S4通用名。它被聲明爲S4通用中的可選參數
dbGetQuery(rmongo.object, collection, query, skip=0, limit=1000)
隨着R中這樣的功能,skip
和limit
可選參數。然而,當我把它用這種方式
dbGetQuery(mongo, 'changesPerTypeEpoch', '{}', limit=10000)
我得到一個錯誤:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘dbGetQuery’ for signature ‘"RMongo", "character", "character", "missing", "numeric"’
查看源代碼,我發現有針對通用定義兩個簽名:
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通用中製作可選參數,必須定義2^n個簽名。有沒有更好的方法來定義S4泛型中的可選參數?
當您調用'dbGetQuery'的'RSQLite'版本時,也會發生此錯誤。我提到這是因爲google在搜索這個錯誤時返回這個答案。要確定這是否是你的問題,運行'find('dbGetQuery')',如果你看到多個結果,你可以通過在名稱空間前面加上前綴來指定Mongo函數,* ie *'RMongo :: dbGetQuery(...) ' – Matt