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

4
我有一个函数,它将字符输入转换为数字输出。
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)

1
Vectorize(votedIndicated)(c("V","V","D")) - rawr
4
你可以完全不用函数来实现这个操作,只需要创建一个查找向量。 vcode <- c("V"=1,"A"=1,"M"=1,"O"=1,"T"=1,"P"= 1,"L"= 1,"D"=0); vcode[foo] - thelatemail
1
sapply(foo, votedIndicated) - Koundy
2个回答

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
只需保留你已经拥有的内容。
as.vector(do.call(rbind,bar))

给出:
[1] 1 1 0

1
unlist(bar) 看起来更容易。 - baptiste

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接