# [R] Trying to understand the magic of lm

Ben Tupper btupper @end|ng |rom b|ge|ow@org
Thu May 9 03:35:49 CEST 2019

```Hi,

I'm not sure if this is what you are after, but instead of defining arguments for elements of the formula why not simply pass your desired formula to your function?

Cheers,
Ben

myfunction <- function(frmla,dataframe){
fit0 <- lm(frmla,data=dataframe)
print (summary(fit0))
}

# Run the function using dep and ind as dependent and independent variables.
mydata <- data.frame(dep=c(1,2,3,4,5),ind=c(1,2,4,5,7))
myfunction(ind ~ dep, mydata)

# Call:
# lm(formula = frmla, data = dataframe)

# Residuals:
# 1    2    3    4    5
# 0.2 -0.3  0.2 -0.3  0.2

# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept)  -0.7000     0.3317  -2.111 0.125298
# dep           1.5000     0.1000  15.000 0.000643 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# Residual standard error: 0.3162 on 3 degrees of freedom
# Multiple R-squared:  0.9868,	Adjusted R-squared:  0.9825
# F-statistic:   225 on 1 and 3 DF,  p-value: 0.0006431

# Run the function using outcome and predictor as dependent and independent variables.
newdata <- data.frame(outcome=c(1,2,3,4,5),predictor=c(1,2,4,5,7))
myfunction(predictor ~ outcome, newdata)

# # Call:
# lm(formula = frmla, data = dataframe)

# Residuals:
# 1    2    3    4    5
# 0.2 -0.3  0.2 -0.3  0.2

# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept)  -0.7000     0.3317  -2.111 0.125298
# outcome       1.5000     0.1000  15.000 0.000643 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# Residual standard error: 0.3162 on 3 degrees of freedom
# Multiple R-squared:  0.9868,	Adjusted R-squared:  0.9825
# F-statistic:   225 on 1 and 3 DF,  p-value: 0.0006431

> On May 8, 2019, at 9:22 PM, Sorkin, John <jsorkin using som.umaryland.edu> wrote:
>
> Can someone send me something I can read about passing parameters so I can understand how lm manages to have a dataframe passed to it, and use columns from the dataframe to set up a regression. I have looked at the code for lm and don't understand what I am reading. What I want to do is something like the following,
>
>
> myfunction <- function(y,x,dataframe){
>
>  fit0 <- lm(y~x,data=dataframe)
>  print (summary(fit0))
> }
>
> # Run the function using dep and ind as dependent and independent variables.
> mydata <- data.frame(dep=c(1,2,3,4,5),ind=c(1,2,4,5,7))
> myfunction(dep,ind)
> # Run the function using outcome and predictor as dependent and independent variables.
> newdata <- data.frame(outcome=c(1,2,3,4,5),predictor=c(1,2,4,5,7))
> myfunction(outcome,predictor)
>
>
>
>
>
> John David Sorkin M.D., Ph.D.
> Professor of Medicine
> Chief, Biostatistics and Informatics
> University of Maryland School of Medicine Division of Gerontology and Geriatric Medicine
> Baltimore VA Medical Center
> 10 North Greene Street
> GRECC (BT/18/GR)
> Baltimore, MD 21201-1524
> (Phone) 410-605-7119
> (Fax) 410-605-7913 (Please call phone number above prior to faxing)
>
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.

Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org

Ecological Forecasting: https://eco.bigelow.org/

[[alternative HTML version deleted]]

```