Обработка вывода из функции 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"
Другие вопросы по тегам