2017-04-17 4 views
0

ich einen Datenrahmen mit Spalte A habenR Pass Formel in einer Funktion Dataframe

ich eine Funktion wie diese haben wollen:

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

so das ich tun kann:

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

oder dies:

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

ich müde modifizierende t er funktioniert mit den folgenden aber nicht funktioniert hat:

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

Dank.

+1

Ist dies eine 'data.frame' oder eine' data.table' (sie sind anders)? Sie können eine Formel/einen Ausdruck nicht so an einen data.frame übergeben. – MrFlick

+0

@MrFlick es ist ein data.frame. – Perceptron

+1

Bitte fügen Sie der Frage, was Sie wollen, das Ergebnis zu sein. Sie haben uns einen Code gegeben, der nicht funktioniert und keinen Sinn ergibt und von uns erwartet, dass wir Ihre Absichten daraus ableiten. Bitte nehmen Sie sich Zeit, uns mehr zu erzählen. – Dason

Antwort

0

Sie können Funktionen als Argumente übergeben, die wahrscheinlich einen String der Funktion schlägt das Senden:

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') 

Eine Möglichkeit, eine Zeichenfolge zu bewerten als Code ist wie folgt:

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

Ich wäre wirklich überrascht, wenn das der beste Weg war, um Ihre Aufgabe zu erfüllen.