在一系列因子上使用vapply

时间:2016-01-12 21:33:06

标签: r

我有一个有序因子向量列表,我想在列表的每个元素中找到最低级别。这是一个使用sapply的简单练习,但我在一个函数中执行此操作,因此希望使用vapply来保证安全。麻烦的是,使用vapply总是返回一个整数向量,我无法弄清楚如何指定FUN.VALUE以便它返回一个因子。有办法吗?

lvls <- ordered(letters)

fac1 <- factor(c("b", "a", "c"), levels = lvls, ordered = TRUE)
fac2 <- factor(c("f", "z", "m"), levels = lvls, ordered = TRUE)
fac3 <- factor(c("p", "d", "q"), levels = lvls, ordered = TRUE)

fac_list <- list(fac1, fac2, fac3)

sapply(fac_list, min) ## Works

## [1] a f d
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z

vapply(fac_list, min, FUN.VALUE = factor("a", levels = lvls))

## [1] 1 6 4

1 个答案:

答案 0 :(得分:4)

(我希望将此作为对您帖子的评论)

如果我理解正确

lvls[vapply(fac_list, min, FUN.VALUE = factor('a',levels = lvls))]

> lvls[vapply(fac_list, min, FUN.VALUE = factor('a',levels = lvls))]
[1] a f d
Levels: a < b < c < d......

将是一个&#39; hacky&#39;解决你的问题。