处理 R 的 lapply 函数的输出/从列表中删除元素

Processing output from R's lapply function / removing elements from lists

我想将 Rlapply 函数返回的信息删减到第一个元素。

所以,对于这样的事情

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

我想最后只保留第一个元素"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获取每列w/in数据帧的信息

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 返回的列表中的信息的最有效方法是什么?

在这种情况下,匿名函数似乎最有意义:

> 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"

另一种效率低得多的方法是定义一个新函数,该函数仅提取向量的第一个元素(这是此列表中的每个元素)并再次使用 lapply

只获取向量第一个元素的新函数

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"