Conor Woolley
Conor Woolley

Reputation: 11

Grouping by a user defined list within a custom function in R

I am trying to create a custom function in R that lets the user perform linear regressions on a data set, I would like the user to be able to input variables for the data to be grouped by so that multiple regressions are performed on the data set. The problem I am having is trying to get a user defined list of variables into the custom function. Below I have tried using "..." however this does not work. If anyone has any idea how I should be approaching this that would be great. For reference For reference - lr.1 = the dataset - ddate = the x variable - alue = the y variable - the variables that the data should be grouped by)

`grouped.lr = function(lr.1,ddate, value, ...){

  test = lr.1 %>%
    group_by(...) %>%
    nest() %>%
    mutate(mod = map(data, fitmodel.test),
           pars = map(mod, tidy),
           pred = map(mod, augment))}`

Upvotes: 1

Views: 117

Answers (1)

Scholar
Scholar

Reputation: 512

It seems like the use of a formula might be fitting here, as it allows the user to specify the predictor-response relations.

The formula object is also accepted as a format for various models and can thus be directly passed down to the lm() function.

# function training a linear model and a random forest
build_my_models <- function(formula, data) {

    lm.fit <- lm(formula, data)
    rf.fit <- randomForest(formula, data)

    return(list(lm.fit, rf.fit))
}

# data frame with three continuous variables
a <- rnorm(100)
b <- rnorm(100, mean = 2, sd = 4)
c <- 2*a + b

my_data <- data.frame(a = a, b = b, c = c)

# build the models
my_models <- build_my_models(a ~ ., my_data)

# here the formula 'a ~ .' defines the relation between response and predictors
# (the dot indicates that 'a' depends on all other variables in the data frame)

If you want to implement a model yourself, it's never a bad idea to stick to R's syntax and conventions. You can check to documentation on how to parse the formula for your specific needs.

Upvotes: 0

Related Questions