Обработка вывода из функции lapply R / удаление элементов из списков
Я хотел бы обрезать информацию, возвращенную R
"s lapply
функция только 1-го элемента.
Итак, для чего-то вроде этого
is(rnorm(10,10))
[1] "numeric" "vector" "atomicVector" "index" "number" ...
Я хотел бы, в конце концов, просто оставить только 1-й элемент "numeric"
Полный пример
x <- rnorm(10,10)
y <- sample(c("a","b","c"),10, replace = TRUE)
z <- factor(sample(c("a","b","c"),10, replace = TRUE))
dat.fake <- data.frame(x,y,z, stringsAsFactors = FALSE)
Используйте lapply для получения информации о каждом столбце с данными
lapply(dat.fake,is)
Я хотел бы просто получить
$x
[1] "numeric"
$y
[1] "character"
$z
[1] "factor"
Вместо полного вывода
$x
[1] "numeric" "vector" "atomicVector" ...
$y
[1] "character" "vector" "data.frameRowLabels" ...
[6] "index"
$z
[1] "factor" "integer" "oldClass" "numeric" "vector"
Есть ли способ сделать это в течение lapply
или аналогичная функция, или какой самый эффективный способ обработки информации в списке, возвращаемом lapply
?
2 ответа
В этом случае анонимная функция кажется наиболее подходящей:
> lapply(dat.fake,function(x) is(x)[1])
$x
[1] "numeric"
$y
[1] "character"
$z
[1] "factor"
Чтобы ответить на вопрос, поставленный в заголовке, используйте базовое извлечение:
> temp <- lapply(dat.fake, is)
> lapply(temp, "[", 1)
$x
[1] "numeric"
$y
[1] "character"
$z
[1] "factor"
Другой, гораздо менее эффективный способ сделать это - определить новую функцию, которая извлекает только 1-ые элементы вектора (то есть, чем является каждый элемент в этом списке) и снова использует lapply
Новая функция, которая захватывает только 1-й элемент вектора
first.element <- function(x)
{
x[1]
}
lapply.out <- lapply(dat.fake,is)
Используйте lapply с новой функцией
lapply(lapply.out,first.element) #**EDITED**
И вывод
$x
[1] "numeric"
$y
[1] "character"
$z
[1] "factor"