处理 R 的 lapply 函数的输出/从列表中删除元素
Processing output from R's lapply function / removing elements from lists
我想将 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获取每列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"
我想将 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获取每列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"