我正在尝试通过skardhamar's rga简化向Google AnalyticsAPI创建和提交查询的过程。我正在领导一个为客户创建报告的小型分析团队,而我的同事使用脚本和R更不方便。因此,我正在尝试提供一些基本元素和报告模板以降低复杂性。
我们经常在网站之间进行比较,因此我创建了一个特定于配置文件的引用类,其中包含帐户ID,配置文件ID等内容。它将附带一小组预定义的查询方法,例如以下:
profile <- setRefClass("profile",
fields = list(
accountID = "character",
profileID = "character"),
methods = list(
topPages = function() {
ga$getData(profileID,
start.date = helper$start,
end.date = helper$end,
metrics = "ga:pageviews,ga:bounceRate",
dimensions = "ga:pagePath",
sort = "-ga:pageviews")
})
)
我最终可能会添加一个字段来存储API返回,以限制我们正在进行的不必要的API调用的数量,但这既不在这里也不在那里。
要构造这些配置文件对象,并向其引用类添加新方法,我有一个帮助器引用类:
helper <- setRefClass("helper",
fields = list(
start = "character",
end = "character"),
methods = list(
newMethod = function(name="", metrics="", dimensions="",
sort="") {
**take the passed arguments and construct a new
query function**
**add function to the profile reference class**
},
newProfile = function(account="", profile="", name="") {
**search for matching account and profile**
**create new profile-class object with the passed name**
})
)
忽略我订购这些示例的潜在问题,我所描述的helper$newMethod()
是否可能?
答案 0 :(得分:0)
它不可能......当你更新引用类的方法时,新对象不会获得更新的方法。此外.self只读取初始化函数之外的内容,因此无法进行自我更新。
答案 1 :(得分:0)
此示例是否可以帮助您进一步了解所需内容?
profile <- setRefClass("profile")
profile$methods(newMethod = function(...) {
.call <- match.call()
.call[[1]] <- quote(profile$methods)
eval(.call)
profile$new()
})
z <- profile$new()$newMethod(sum=function(x,y){x+y})
z$sum(1,2)