2017-06-23 73 views
0

使用data.table柱更新内参数I具有以下数据表和函数,其提取的参数,并增加了它作为数据表中的列:通过引用

library(stringr) 
library(data.table) 

pq <- c("cm_mmc=MSN-_-Exact-_-BrandExact-_-CheddarCheese" 
    ,"cm_mmc=Google-_-cheeseTypes-_-cheddar-_-cheesedelivered&gclid=CMXyy2D81MsCFcsW0w0dMVoPGw" 
    ,"cm_mmc=MSN-_-worldcitiesuslocations-_-cheese-_-cheeseshops" 
    ,"cm_mmc=MSN-_-worldcitiesuslocations-_-cheese-_-cheeseshops") 


rq <- c("q=cheese&src=IE-SearchBox&FORM=IESR02", 
        "sa=L", 
        "q=london+cheese+shop&src=IE-TopResult&FORM=IETR02&pc=WCUG", 
        "q=london+cheese+shop&src=IE-TopResult&FORM=IETR02&pc=WCUG") 

DT = data.table(page_urlquery = pq, refr_urlquery = rq) 

# Extracts a paramater from the relevant query and adds it to the table as a column 
extract_param <- function(dt, source = c("page_urlquery", "refr_urlquery"), param_name){ 
    source <- match.arg(source) 
    regexp <- paste("(?i)", param_name, "=([^&]+)", sep="") 
    col_name <- switch(source 
        ,"page_urlquery" = paste("url_", param_name, sep = "") 
        ,"refr_urlquery" = paste("ref_", param_name, sep = "") 
) 

    dt[,(col_name):= str_match((source), regexp)[,2]] 
} 

然而,当我调用函数作为如下:

extract_param(DT, "page_urlquery", "cm_mmc") 

它创建列,但内容是空白的。我认为它在数据表(源)参数中的语法有问题。我错过了什么?

回答

1

改变内部函数的代码从

dt[,(col_name):= str_match((source), regexp)[,2]] 

dt[,(col_name):= str_match(get(source), regexp)[,2]]