[SOLVED] Function within a function: cramer function "Error in loglin"

Issue

I tried to embed the cramer function from sjstats package. Although the function works perfectly outside the custom function, it doesn’t work within it.

Thank you very much in advance.

library (sjstats)    
cramer2 <- function(dta, x, y){
effsize <- cramer(x ~ y, data = dta)
  return(effsize)
}

cramer2(x=gender, y=age, dta=df)

Error in loglin(data, margins, start = start, fit = fitted, param = param, :
falsche Spezifikationen für ‘table’ oder ‘start’

Solution

This happens because x and y are not automatically substituted in a formula for the variables you have passed. Look:

f <- function(x, y) {
  return(x ~ y)
}

f(a, b)
#> x ~ y

If you want the variables substituted, you can do something like

f2 <- function(x, y) {
   call("~", substitute(x), substitute(y))
}

f2(a, b)
#> a ~ b

So in your case you can do:

library (sjstats)    

cramer2 <- function(dta, x, y) {
  
  f <- as.formula(call("~", substitute(x), substitute(y)))
  effsize <- cramer(f, data = dta)
  return(effsize)
}

Obviously we don’t have your data, but using the built-in data set efc we can demonstrate this works as expected:

data(efc)

cramer2(efc, e16sex, c161sex)
#> [1] 0.05258249

Created on 2022-02-27 by the reprex package (v2.0.1)

Answered By – Allan Cameron

Answer Checked By – Willingham (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published.