2015-05-01 59 views
1

我希望能夠將函數列表應用於ddply,以便列表可以基於我想要的擴展。將函數列表傳遞給R中的ddply

事情是這樣的:

func_list = list(Start.Date = "min(Date)", End.Date = "max(Date)") 
do.call(ddply, c(list(.data = df, .variables = grps, .fun=summarize), func_list)) 

當我運行的是,它ddply調用但後來有一個名爲Start.Date變量,它等於字符串「分(日)」。我試過不引用,但那也行不通。

編輯(示例代碼和預期效果):

library(plyr) 

get_summary <- function(grps, func_list, df = raw) {  
    out <- do.call(ddply, 
        c(list(.data = df, .variables = grps, .fun=summarize), 
        func_list)) 
    return(out) 
} 

raw <- data.frame(date = c(as.Date("2015-5-1"), 
          as.Date("2015-5-1"), 
          as.Date("2015-5-2"), 
          as.Date("2015-5-2")), 
        count = c(2,4,6,8), 
        amnt = c(100,200,300,400)) 

func_list <- list(
    total_count = "sum(count)", 
    avg_amnt = "mean(amnt)" 
) 

get_summary("date", func_list) 

# Desired output: 
#   date total_count avg_amnt 
# 1 2015-05-01   6  150 
# 2 2015-05-02   14  350 
# 
# Which is equivalent to: 
# ddply(raw, "date", summarize, total_count = sum(count), avg_amnt = mean(amnt)) 
+1

你能提供一個可重現的例子和所需的輸出嗎? – Molx

+0

添加了一個帶有示例和所需輸出的編輯。 –

回答

0

要解決你的代碼只需要parse()

func_list <- list(
      total_count = parse(text="sum(count)"), 
      avg_amnt = parse(text="mean(amnt)")) 

這將告訴翻譯文本應該爲代碼進行評估和不是字符串。

+0

完美工作,謝謝! –