我想编写一个通用函数,通过RGoogleAnalytics从Google Analytics中检索数据,以便我可以通过编程方式创建不同的报告。
每个报告的具体维度,指标,可选过滤器和细分等都存储在配置文件中,以便我可以使用相应的配置文件名调用我的函数。
对于某些报告,我必须使用细分和过滤器,对于其他报告,这些值为空。
我将所有这些值存储在名为my *的变量中,例如,过滤器的myfilters,段的mysegment等,以及每天循环一个日期范围(以减少抽样问题)我有两个开始和结束日期的转轮变量。
我现在的自然尝试是调用查询$ Init,如下所示:
query$Init(
start.date = as.character(dateRunner),
end.date = as.character(dateRunnerEnd),
dimensions = mydimensions,
metrics = mymetrics,
max.results = mymaxresults,
table.id = paste("ga:", myprofileId, sep=""),
access_token = as.character(myaccess_token),
sort = mysorting,
segment = mysegment,
filters = myfilters,
)
但是,当mysorting,mysegment或myfilters为空时,它们仍会以空值添加到查询中,从而导致出现错误消息
code : 400 Reason : Invalid value ''. Values must match the following regular expression: 'ga:.+'
当我调试并使用查询$ to.uri()来查看查询的GET版本时,我得到了
https://www.googleapis.com/analytics/v3/data/ga?start-date=2014-07-01&end-date=2014-07-01&dimensions=ga%3Adate&metrics=ga%3Asessions&segment=gaid%3A%3A1ZLAUAqqRYqvub-LR5Tx2g&sort=&filters=&max-results=100&ids=ga%3A5298259&access_token=...
只有当它们为空时,才能在Init调用中添加参数sort,segment和filters来阻止错误。
但我该怎么做?我的第一次尝试是
query$Init(start.date = as.character(dateRunner),
end.date = as.character(dateRunnerEnd),
dimensions = mydimensions,
metrics = mymetrics,
max.results = mymaxresults,
table.id = paste("ga:", myprofileId, sep=""),
access_token = as.character(myaccess_token),
if (nchar(mysorting)!=0) {sort = mysorting},
if (nchar(mysegment)!=0) {segment = mysegment},
if (nchar(myfilters)!=0) {filters = myfilters},
)
然而,这给了我奇怪的效果,比如实际添加的mysegment变量作为排序变量和类似,所以整个构造似乎是错误的?
因此我尝试在Init函数之前和之后直接手动设置调试模式中的这些值(例如查询$ sort =“ga:date”),但在此操作之后依据查询$ to.uri()给我带有来自Init调用的参数的URL,因此这个操作根本不设置这些值。似乎设置这些值的唯一方法是在Init函数调用中实际使用它们。
除了创建一个非常复杂的if-else结构,检查现有参数的每个可能组合,从而使用不同的参数组合复制整个Init调用六次 - 有没有办法可选地将它们添加到Init函数之外?