Подмножество переменных во фрейме данных в зависимости от типа столбца

Мне нужно установить подкадр данных на основе типа столбца - например, из кадра данных с 100 столбцами мне нужно сохранить только те столбцы с типомfactor или жеinteger, Я написал короткую функцию для этого, но есть ли более простое решение или какая-то встроенная функция или пакет в CRAN?

Мое текущее решение для получения имен переменных с запрошенными типами:

varlist <- function(df=NULL, vartypes=NULL) {
  type_function <- c("is.factor","is.integer","is.numeric","is.character","is.double","is.logical")
  names(type_function) <- c("factor","integer","numeric","character","double","logical")
  names(df)[as.logical(sapply(lapply(names(df), function(y) sapply(type_function[names(type_function) %in% vartypes], function(x) do.call(x,list(df[[y]])))),sum))]  
}

Функцияvarlist работает следующим образом:

Для каждого запрошенного типа и для каждого столбца во фрейме данных вызовите функцию "is.TYPE"Сумма тестов для каждой переменной (логическое значение преобразуется в целое число автоматически)Привести результат к логическому векторуимена подмножеств во фрейме данных

И некоторые данные, чтобы проверить это:

df <- read.table(file="http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data", sep=" ", header=FALSE, stringsAsFactors=TRUE)
names(df) <- c('ca_status','duration','credit_history','purpose','credit_amount','savings', 'present_employment_since','installment_rate_income','status_sex','other_debtors','present_residence_since','property','age','other_installment','housing','existing_credits', 'job','liable_maintenance_people','telephone','foreign_worker','gb')
df$gb <- ifelse(df$gb == 2, FALSE, TRUE)
df$property <- as.character(df$property)
varlist(df, c("integer","logical"))

Я спрашиваю, потому что мой код выглядит действительно загадочным и трудным для понимания (даже для меня, и я закончил функцию 10 минут назад).

Ответы на вопрос(2)

Ваш ответ на вопрос