【发布时间】:2012-08-03 15:00:31
【问题描述】:
这纯粹是出于好奇(了解有关 Reduce 的更多信息)。有更好的方法来实现我正在做的事情,我对它们不感兴趣。
有些人使用一系列嵌套的ifelse 命令来重新编码/查找某些内容。也许它看起来像这样:
set.seed(10); x <- sample(letters[1:10], 300, T)
ifelse(x=="a", 1,
ifelse(x=="b", 2,
ifelse(x=="c", 3,
ifelse(x=="d", 4, 5))))
有没有办法将do.call 或Reduce 与ifelse 一起使用来更有说服力地完成工作?
【问题讨论】:
-
好问题。当然,在实践中,
sapply(x, function(x) switch(x, a = 1, b = 2, c = 3, d = 4, 5这样的东西可能是最干净的。 -
@Richie 谢谢。我实际上会通过使用环境的查找表或使用
match的标准索引来解决这个问题,但我想看看Reduce或do.call是否可以应用于这个问题。 -
如:
match(x, letters[1:4], nomatch=5) -
是的,就是这样。我认为
Reduce不在此列,但do.call可能会以某种方式使用,如果您将所有内容都作为列表传递,也许。 -
是的,看起来很像
Reduce应该可以工作,但从根本上说,它传递了三个输入而不是两个。可以将它与列表 [2] 的列表或其他东西组合在一起。