我有一个有序因子向量列表,我想在列表的每个元素中找到最低级别。这是一个使用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
答案 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;解决你的问题。