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