在ifelse中使用Reduce/do.call

Tyl*_*ker 10 r higher-order-functions

这纯粹是一种好奇心(更多地了解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))))
Run Code Online (Sandbox Code Playgroud)

有没有办法使用其中任何一个do.callReduce与之相比ifelse更有说服力地完成工作?

G. *_*eck 3

尝试这个:

> library(gsubfn)
> strapply(x, ".", list(a = 1, b = 2, c = 3, d = 4, 5), simplify = TRUE)
  [1] 5 4 5 5 1 3 3 3 5 5 5 5 2 5 4 5 1 3 4 5 5 5 5 4 5 5 5 3 5 4 5 1 2 5 5 5 5
 [38] 5 5 5 3 3 1 5 3 2 1 5 2 5 4 5 3 5 2 5 5 5 4 5 1 2 5 4 5 5 5 5 1 3 1 5 5 5
 [75] 1 5 4 5 3 3 5 5 3 5 3 1 5 3 2 2 5 5 5 5 4 5 3 5 5 1 4 1 4 5 5 5 5 5 5 5 5
[112] 5 2 5 5 5 3 5 5 5 2 4 4 5 3 3 5 4 5 5 5 1 5 3 4 3 5 5 2 5 5 3 1 5 2 5 5 5
[149] 1 5 5 2 1 2 4 2 2 3 5 2 5 5 5 5 5 3 5 5 5 5 5 5 5 5 5 5 2 3 5 4 4 2 5 5 5
[186] 5 5 5 5 2 1 1 1 5 5 5 5 3 5 5 3 5 5 5 2 5 5 5 3 5 5 5 5 5 1 5 5 5 5 2 2 5
[223] 5 5 4 3 4 5 5 4 5 5 5 3 5 3 5 5 5 5 4 5 5 1 5 5 2 5 5 5 2 5 5 3 2 5 4 5 2
[260] 5 5 3 5 5 1 4 3 5 4 5 2 5 5 3 5 5 5 5 5 1 1 5 2 5 1 5 5 5 5 5 5 5 5 5 5 5
[297] 5 1 5 2
Run Code Online (Sandbox Code Playgroud)

  • 尝试“do.call &lt;- bandply”,然后用“do.call”代替“strapply”重复上述操作。 (5认同)
  • 当然还有 `dont.call &lt;- function() q("no")` 。(注意:未成年人或不熟悉R的人请勿使用。) (5认同)
  • 我看到爱的夏天已经让位于不满的秋天:-D (3认同)