2012-11-12 37 views
1

我想編寫一個函數,該函數根據從SQL表中讀取的字符串在數據框中創建新變量。該函數應該帶有兩個參數:dfstr,並返回df並附加一個額外的列。 str將爲"a = f(B)"形式的字符串,其中adfB的列爲df的一組列,f爲轉換函數。傳遞字符串作爲變換的第二個參數

例子:

df <- data.frame(EventID = c(111,112,113), Day = c(6,8,15)) 

我要的是transform(df, Week = ceiling(Day/7)),但我無法弄清楚如何傳遞字符串"Week = ceiling(Day/7)"(如字符類型的變量)的transform...參數。

我試過parseeval的各種組合,但我無法弄清楚如何將字符對象轉換爲R文檔描述爲「標記的向量表達式」的內容。

回答

2

這裏有一種方法:

fun <- function(df, str.expression) within(df, eval(parse(text=str.expression))) 

fun(df, "Week = ceiling(Day/7)") 
# EventID Day Week 
# 1  111 6 1 
# 2  112 8 2 
# 3  113 15 3 
0

想通了相當快的,但我還是會共享:eval(parse())整個事情!

eval(parse(text = paste("transform(df,", str, ")", sep = ""))) 

這就是說,我喜歡@ flodel的答案更好。

+1

使用'sprintf('transform(df,%s)',str)'來構造你的調用可能更容易 – mnel

相關問題