Skip to main content

Get class objects of multiple objects

For my function to perform well I need to get the class object of multiple objects that meet the following condition:

  1. The first class sends TRUE when the object is all three: list, character, character.
  2. The second class should send TRUE when the object is all three: list, character, numeric.

For example:

first_class <- list('prediction','median')
second_class <- list('prediction', c(1, 2, 3, 4))

test_class_object <- function(class_object) {
  if (is(class_object, 'list') == TRUE &
      is(class_object[[1]], 'character') == TRUE &
      is(class_object[[2]], 'character') == TRUE) {
    print('all characters')
  } else if (is(class_object, 'list') == TRUE &
             is(class_object[[1]], 'character') == TRUE &
             is(class_object[[2]], 'numeric') == TRUE) {
    print('last is numeric')
  }
}

Whilst this works ok for small number of objects, if I had a larger list of objects like 15 then this would be very messy. How can I in the most simplest form repeat this function?

Updated with @Akruns answer:

test_class_object <- function(class_object) {
  if ({
    c(class(class_object), sapply(class_object, class))%>% last() %>%  is(., 'character')
  } == TRUE){print('all characters')} else if(
    {
      c(class(class_object), sapply(class_object, class))%>% last() %>%  is(., 'numeric')
    } == TRUE
  ){print('last is numeric')}
}

This allows for more mobility, I'll also have to check into @r2Evans comment because as it stands my lists have single class objects, but I may get multiples in the near future.

Answer

If we want to get the class of inner list elements, use lapply/sapply to get the class i.e.

c(class(first_class), sapply(first_class, class))

returns a vector

c(class(first_class), lapply(first_class, class))

returns a list, then can use a vector of class values to compare

Comments