我有一个我写的函数,它将字符输入转换为数字输出。
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)
这样的栏?
答案 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