lapply返回一系列向量而不是单个向量

时间:2015-08-03 04:00:30

标签: r

我有一个我写的函数,它将字符输入转换为数字输出。

votedIndicated <- function(votedCode) {
  switch(votedCode,
         "V" = 1,
         "A" = 1,
         "M" = 1,
         "O" = 1,
         "T" = 1,
         "P" = 1,
         "L" = 1,
         "D" = 0)
}

当我运行它时,我得到了预期的回报:

> votedIndicated("V")
[1] 1
> votedIndicated("D")
[1] 0

但是,当我尝试将此函数应用于向量时,我没有得到另一个向量而是一系列单值向量(我想我说得对)

> foo <- c("V","V","D")
> bar <- lapply(foo, votedIndicated)
> bar
[[1]]
[1] 1

[[2]]
[1] 1

[[3]]
[1] 0

如何制作像bar <- c(1,1,0)这样的栏?

2 个答案:

答案 0 :(得分:5)

您所指的“一系列单值向量”在R中称为列表。列表也是一个向量,但您希望返回原子矢量。为此,由于您知道返回值始终是单个数值,因此您可以使用vapply()

vapply(foo, votedIndicated, 1)
# V V D 
# 1 1 0 

或者如果你不想要名字,

vapply(foo, votedIndicated, 1, USE.NAMES = FALSE)
# [1] 1 1 0

有关vapply()的详情,请参阅help(vapply)

答案 1 :(得分:1)

保持已经拥有的东西。

as.vector(do.call(rbind,bar))

给出:

[1] 1 1 0