2017-04-17 81 views
0

我有一個數據幀與A列中數據幀[R通行證公式中的功能

我想有這樣的功能:

myFunction <- function(df,term) { 
    df = df[,term] 
    return(df) 
} 

,所以我可以這樣做:

myFunction(mydf,"sqrt('A')")) 

或本:

myFunction(mydf,"log('A')")) 

我累了修改ŧ他功能與以下,但沒有工作:

df = df[,I(term)] 
df = df[,as.formula(term)] 

謝謝。

+1

這是'data.frame'還是'data.table'(它們是不同的)?你不能將公式/表達式傳遞給像這樣的數據框。 – MrFlick

+0

@MrFlick這是一個data.frame。 – Perceptron

+1

請將您想要的結果添加到問題中。你給我們的代碼不起作用,沒有意義,並期望我們從中找出你的意圖。請花時間告訴我們更多。 – Dason

回答

0

可以函數作爲參數傳遞,這可能節拍發送函數的字符串:

myFunction <- function(df,term,fun) { 
    vec = df[,term] 
    fun(vec) 
} 

data(iris) 

# answers 
sum(iris$Sepal.Width) 
mean(iris$Sepal.Width) 

# use 'Sepal.Width' column instead of 'A' 
myFunction(iris,'Sepal.Width',sum) 
myFunction(iris,'Sepal.Width',mean) 

# using a function string 
myFunctionStr <- function(df,term,funstr) { 
    vec = df[,term] 
    eval(call(funstr,vec)) 
} 

myFunctionStr(iris,'Sepal.Width','sum') 
myFunctionStr(iris,'Sepal.Width','mean') 

一種方法來評估一個字符串代碼是這樣的:

eval(parse(text = 'sqrt(16)')) 

我會真的很驚訝,如果這是完成你的任務,但最好的方式。