条件赋值 - 当条件和预期 return 值不具有相同特征时,ifelse() 是最好的吗? [R]

Conditional assignment of value - is ifelse() the best when condition and intended return value don't have same features? [R]

我想有条件地为变量赋值。例如,我想创建一个 alphabet 变量,如果某个字母是小写,则赋值给它 letters,如果某个字母是大写,则赋值给它 LETTERS

第一个想到的是使用<-ifelse()。但是,这对我来说不起作用:

> alphabet <- ifelse("B" %in% letters, letters, LETTERS)
> alphabet
[1] "A"

实际上我看到,参考ifelse(test, yes, no),函数描述说:“ifelse returns 一个与test 形状相同的值,它是填充了从 yesno [...] 中选择的元素。在“值”部分,它指定了更多内容:“与 test 和数据具有 相同长度和属性 (包括维度和“class”)的向量来自 yesno 的值的值。[...]".

好的 - 我意识到我可以使用 assign() 而不是 <- 并且值已正确分配给变量:

> ifelse("B" %in% letters, assign("alphabet", letters), assign("alphabet", LETTERS))
[1] "A"
> alphabet
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

但是,根据上面的输出,ifelse() 仍然是 returns 所选字母集中的第一个字符。

我对此不满意,因为...

  1. ...事实上我的代码返回了一些我不需要的东西,并且...
  2. ...事实上 ifelse() 甚至无法与 <- 一起使用 ...

让我想知道是否有更好的方法来做到这一点。

是否有首选/更高效/更好的礼节或以任何方式更合适的选项来有条件地分配一个值,如在这种情况下,或者我应该忽略困扰我的事情?

我们可以用if/else代替ifelse

alphabet <- if('B' %in% letters) letters else LETTERS