/ / Przetwarzanie danych wyjściowych z funkcji lapply R / usuwanie elementów z list - r, list, lapply

Przetwarzanie danych wyjściowych z funkcji lapply R / usuwanie elementów z list - r, list, lapply

Chciałbym przyciąć informacje zwrócone przez R"s lapply funkcja tylko do pierwszego elementu.

Na coś takiego

is(rnorm(10,10))
[1] "numeric"      "vector"       "atomicVector" "index"        "number"      ...

Chciałbym na końcu zachować tylko pierwszy element "numeric"

Pełny przykład

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)

Użyj lapply, aby uzyskać informacje o każdej kolumnie w / w ramce danych

lapply(dat.fake,is)

Chciałbym po prostu dostać

$x
[1] "numeric"
$y
[1] "character"
$z
[1] "factor"

Zamiast pełnej wydajności

$x
[1] "numeric"      "vector"       "atomicVector" ...
$y
[1] "character"           "vector"              "data.frameRowLabels" ...
[6] "index"
$z
[1] "factor"   "integer"  "oldClass" "numeric"  "vector"

Czy istnieje sposób, aby to zrobić w środku lapply lub podobną funkcję, lub jaki jest najskuteczniejszy sposób przetwarzania informacji na liście zwróconej przez lapply?

Odpowiedzi:

2 dla odpowiedzi № 1

W tym przypadku anonimowa funkcja wydaje się mieć największy sens:

> lapply(dat.fake,function(x) is(x)[1])
$x
[1] "numeric"

$y
[1] "character"

$z
[1] "factor"

Aby odpowiedzieć na pytanie postawione w tytule, użyj podstawowego wyciągu:

> temp <- lapply(dat.fake, is)
> lapply(temp, "[", 1)
$x
[1] "numeric"

$y
[1] "character"

$z
[1] "factor"

0 dla odpowiedzi nr 2

Innym, znacznie mniej wydajnym sposobem, aby to zrobić, jest zdefiniowanie nowej funkcji, która wyodrębnia tylko pierwsze elementy wektora (który jest tym, co każdy element na tej liście) i używa lapply ponownie

Nowa funkcja pobierająca tylko pierwszy element wektora

first.element <- function(x)
{
x[1]
}


lapply.out <- lapply(dat.fake,is)

Używaj lapply z nową funkcją

lapply(lapply.out,first.element) #**EDITED**

I wyjście jest

$x
[1] "numeric"
$y
[1] "character"
$z
[1] "factor"