[R] passing field name parameter to function

David Winsemius dwinsemius at comcast.net
Sun Oct 11 04:03:25 CEST 2009


You code is not reproducible.

Take a look at this much simpler example:

 > a
   x y xx xxx
1 1 4  8  12
2 2 5  9  13
3 3 6 10  14
4 4 7 11  15
5 1 4  8  12
6 2 5  9  13
7 3 6 10  14
8 4 7 11  15

 > funct <- function(df, colnm) print(df[, colnm])

 > funct(a, "xx")
[1]  8  9 10 11  8  9 10 11
#----------
 > fortune(106)

If the answer is parse() you should usually rethink the question.
    -- Thomas Lumley
       R-help (February 2005)
#-----------
Further simple example:

(use dput(a) to produce the structure object:)


a <- structure(list(x = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), y = c(4L,
5L, 6L, 7L, 4L, 5L, 6L, 7L), xx = c(8L, 9L, 10L, 11L, 8L, 9L,
10L, 11L), xxx = c(12L, 13L, 14L, 15L, 12L, 13L, 14L, 15L)), .Names =  
c("x",
"y", "xx", "xxx"), row.names = c(NA, -8L), class = "data.frame")

lmfunct <- function(df, idvar, dvar) lm( as.formula( paste(dvar, " ~  
", idvar, sep="") ), data=df)
lmfunct(a, "x", "y")

####---------------------------
Call:
lm(formula = as.formula(paste(dvar, " ~ ", idvar, sep = "")),     data  
= df)

Coefficients:
(Intercept)            x
           3            1

-- 
david

On Oct 10, 2009, at 9:27 PM, tdm wrote:

>
> Hi,
>
> I am passing a data frame and field name to a function. I've figured  
> out how
> I can create the formula based on the passed in field name, but I'm
> struggling to create a vector based in that field.
>
> for example if I hard code with the actual field name
>
> Y = df$Target, everything works fine.
>
> but if I use the passed in parameter name, it doesn't give me what I  
> want,
>
> Y = df$mytarget
>
>
> Here is the function,
>
> # trying to pass field name to a function
> logistictest <- function(df,mytarget)
> {
>
> #library for AUC calculation
> library(caTools)
>
> #build logistic model
> mytarget <- deparse(substitute(mytarget))
> myformula <- paste(mytarget," ~ .")
> myformula <- deparse(substitute(myformula))
> logistic_reg <- glm(myformula , data=df,  
> family=binomial(link="logit"))
> print("model build OK")
>
> #score up
> scores <- predict(logistic_reg, type="response", df)
> print("model scored OK")
>
> #calc AUC
> Y = df$mytarget
>
> auc <- colAUC(scores,Y)
> print("auc calculated OK")
>
> }
>
> logistictest(df=trainset,mytarget=Target)
>
>
> [1] "model build OK"
> [1] "model scored OK"
> Error in as.vector(x, mode) : invalid 'mode' argument
> -- 
> View this message in context: http://www.nabble.com/passing-field-name-parameter-to-function-tp25840014p25840014.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list