… to keep track of magic the gathering games.
Check it out here!
… to keep track of magic the gathering games.
Check it out here!
OK so here’s an update to the permutation pyramid I made.
I had to make a list of different permutations of models but it became hard to keep track of all the different variables and their combinations. Hence, the permutation pyramid. The goal is to make a list of vector combinations and permutations. I found this super useful when generating formulas for AICc/Model selection.
Enjoy!
The function has a few options:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | pyramid <- function ( vec, order.matters = FALSE , req, interact ){ # pyramid of variable combinations # this doesn't include different # arrangements vrz <- lapply ( 1: length ( vec ), function ( x ){ combn ( vec, x ) %>% as.data.frame () } ) %>% purrr:: flatten () %>% unname () # If there are interactions if ( ! missing ( interact ) ){ # possible interaction combos intx <- seq ( from = 1, to = length ( interact ), by = 1 ) %>% knp.perm.pyramid () # extra interactions vrz.int <- list () # look through vars for ( v in vrz ){ # make a list of interactions # and add them to the list vrz.int <- append ( vrz.int, lapply ( intx, function ( ints ){ # count number of matches to compare # and filter out unaltered var lists mt <- 0 # for each interaction # check if its in the array # then add it if it is for ( int in ints ) { if ( length ( intersect ( v, interact[[ int ]] ) ) == length ( interact[[ int ]] ) & length ( interact[[ int ]] ) > 1 ){ v <- c ( v, paste0 ( interact[[ int ]], collapse = ":" ) ) mt <- mt + 1 } } # if the number of matches equals # the number of interactions then # return the altered array if ( mt == length (ints) ){ return ( v ) } return ( NULL ) }) %>% plyr:: compact () ) } # append interactions vrz <- append ( vrz, vrz.int ) } # order matters so lets rearrange if ( order.matters ){ vrz <- lapply ( vrz, function ( x ){ combinat:: permn ( x ) }) %>% purrr:: flatten () } # if there's any required variables in each combination if ( ! missing ( req ) ){ vrz <- lapply (vrz, function ( x ){ if ( length ( intersect ( x, req ) ) == length ( req ) ){ return ( x ) } return ( NULL ) }) %>% plyr:: compact () } # return list of character # permutations return ( vrz ) } |
Plain vanilla use
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | > a <- c ( "A" , "B" , "C" ) > pyramid ( a ) [[1]] [1] "A" [[2]] [1] "B" [[3]] [1] "C" [[4]] [1] "A" "B" [[5]] [1] "A" "C" [[6]] [1] "B" "C" [[7]] [1] "A" "B" "C" |
If the order of the elements matters
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | > a <- c ( "A" , "B" , "C" ) > pyramid ( a, order.matters = TRUE ) [[1]] [1] "A" [[2]] [1] "B" [[3]] [1] "C" [[4]] [1] "A" "B" [[5]] [1] "B" "A" [[6]] [1] "A" "C" [[7]] [1] "C" "A" [[8]] [1] "B" "C" [[9]] [1] "C" "B" [[10]] [1] "A" "B" "C" [[11]] [1] "A" "C" "B" [[12]] [1] "C" "A" "B" [[13]] [1] "C" "B" "A" [[14]] [1] "B" "C" "A" [[15]] [1] "B" "A" "C" |
Require variables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | > a <- c ( "A" , "B" , "C" , "D" , "E" ) > b <- c ( "B" , "D" ) > pyramid ( a, req = b ) [[1]] [1] "B" "D" [[2]] [1] "A" "B" "D" [[3]] [1] "B" "C" "D" [[4]] [1] "B" "D" "E" [[5]] [1] "A" "B" "C" "D" [[6]] [1] "A" "B" "D" "E" [[7]] [1] "B" "C" "D" "E" [[8]] [1] "A" "B" "C" "D" "E" |
Include interactions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | > a <- c ( "A" , "B" , "C" ) > b <- list ( c ( "A" , "B" ), c ( "A" , "B" , "C" ) ) > pyramid ( a, interact = b ) [[1]] [1] "A" [[2]] [1] "B" [[3]] [1] "C" [[4]] [1] "A" "B" [[5]] [1] "A" "C" [[6]] [1] "B" "C" [[7]] [1] "A" "B" "C" [[8]] [1] "A" "B" "A:B" [[9]] [1] "A" "B" "C" "A:B" [[10]] [1] "A" "B" "C" "A:B:C" [[11]] [1] "A" "B" "C" "A:B" "A:B:C" |
So I had to make a combination of different values based on elements in a vector. With a few tweaks and what not I made a little function to find all the combinations and permutations of a given vector. Enjoy
The function:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # creat a list of combinations and # permutations of elements from # a single vector. This requires # a few libraries: # library( dplyr ) # library( purrr ) # library( combinat ) # "order.matters" is means that # for every combination of elements # find every order they can be # arranged. permutation.pyramid <- function ( v, order.matters = TRUE ){ # get the unique combinations of elements # and flatten them into a one dimensional list out <- 1: length (v) %>% lapply ( function ( x ){ combn ( v, x ) %>% as.data.frame () }) %>% purrr:: flatten () %>% unname () # if order.matters then find all the # arrangements of each combination if ( order.matters ){ out <- out %>% lapply ( function ( x ){ combinat:: permn ( x ) }) %>% purrr:: flatten () } # return list of permutations return ( out ) } |
Use and examples.
Find all combinations and permutations of a given vector
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | > test <- c("A","B","C") > permutation.pyramid( test ) [[1]] [1] "A" [[2]] [1] "B" [[3]] [1] "C" [[4]] [1] "A" "B" [[5]] [1] "B" "A" [[6]] [1] "A" "C" [[7]] [1] "C" "A" [[8]] [1] "B" "C" [[9]] [1] "C" "B" [[10]] [1] "A" "B" "C" [[11]] [1] "A" "C" "B" [[12]] [1] "C" "A" "B" [[13]] [1] "C" "B" "A" [[14]] [1] "B" "C" "A" [[15]] [1] "B" "A" "C" |
Find all combinations of vector
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | > test <- c("A","B","C") > permutation.pyramid( test, order.matters = FALSE ) [[1]] [1] "A" [[2]] [1] "B" [[3]] [1] "C" [[4]] [1] "A" "B" [[5]] [1] "A" "C" [[6]] [1] "B" "C" [[7]] [1] "A" "B" "C" |
Anyways I hope that’ll be useful for someone!
A small little function written in R to get the 95% confidence intervals and some quick stats of a vector. I found this useful in error reporting in some stats. I got the concept from this tutorial.
This does require the dplyr library
Function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | library ( dplyr ) ci <- function ( x ){ cnf <- dplyr:: tibble ( mean = mean ( x, na.rm = TRUE ), st.dev = sd ( x, na.rm = TRUE ), n = length ( x ), error = qnorm ( 0.975 ) * st.dev / sqrt ( n ), ci05 = mean - error, ci95 = mean + error ) cat ( cnf$mean, "(" , cnf$ci05, "-" , cnf$ci95, ")\n" ) return ( cnf ) } |
Use
1 2 3 4 5 6 7 | > x <- sample (10) > ci (x) 5.5 ( 3.623477 - 7.376523 ) # A tibble: 1 x 6 mean st.dev n error ci05 ci95 <dbl> <dbl> <int> <dbl> <dbl> <dbl> 1 5.5 3.03 10 1.88 3.62 7.38 |
Just a quick update to make the Grade Calculator more user friendly.
Hope y’all can enjoy that and find it useful.
As a coding exercise and my first dip into Angular JS I thought I’d make a grade calculator to help me estimate grades. I hope it helps anyone interested in estimating your grades needed to pass a course.
The link to the calculator can be found here.