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

时间:2015-01-07 15:50:50

标签: r list lapply

我想将R lapply函数返回的信息修剪为第一个元素。

所以,对于像这样的事情

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获取数据框中每列的信息

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 个答案:

答案 0 :(得分: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 :(得分:0)

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

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

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


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

使用lapply with newfunction

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

输出

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