Search code examples
rfunctiondplyrapplyranking

Apply custom function to any dataset with common name


I have a custom function that I want to apply to any dataset that shares a common name.

common_funct=function(rank_p=5){ 
  df =  ANY_DATAFRAME_HERE[ANY_DATAFRAME_HERE$rank <rank_p,]
  return(df)
}

I know with common functions I could do something like below to get the value of each.

apply(mtcars,1,mean)

But what if I wanted to do :

apply(any_dataset, 1, common_funct(anyvalue))

How would I pass that along?

library(dplyr)
mtcars$rank = dense_rank(mtcars$mpg)
iris$rank = dense_rank(iris$Sepal.Length)

Now how would I go about applying my same function to both values?


Solution

  • If I understand you question, I would suggest putting you data frames into a list and apply over it. So

    ## Your example function
    common_funct=function(df, rank_p=5){ 
      df[df$rank <rank_p,]
    }
    
    ## Sanity check
    common_funct(mtcars)
    common_funct(iris)
    

    Next create a list of the data frames

    l = list(mtcars, iris)
    

    and use lapply

    lapply(l, common_funct)