值的条件赋值 - ifelse() 当条件和预期的返回值没有相同的特征时是最好的吗? [R]
Posted
技术标签:
【中文标题】值的条件赋值 - ifelse() 当条件和预期的返回值没有相同的特征时是最好的吗? [R]【英文标题】:Conditional assignment of value - is ifelse() the best when condition and intended return value don't have same features? [R] 【发布时间】:2021-10-05 13:32:07 【问题描述】:我想有条件地为变量赋值。例如,我想创建一个alphabet
变量,如果某个字母是小写的,则分配给它letters
,或者如果某个字母是大写的,则分配给它LETTERS
。
首先想到的是使用<-
和ifelse()
。但是,这在我的情况下不起作用:
> alphabet <- ifelse("B" %in% letters, letters, LETTERS)
> alphabet
[1] "A"
事实上,我看到,关于ifelse(test, yes, no)
,函数描述说:“ifelse
返回一个与test
形状相同的值,其中填充了从yes
或@987654331 中选择的元素@ [...]”。在值部分,它指定了更多内容:“与test
和来自@987654334 值的数据值相同长度和属性(包括维度和“class
”)的向量@ 或 no
. [...]"。
好的 - 我意识到我可以使用 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()
仍然返回所选字母集中的第一个字符。
我对此不满意,因为...
-
...事实上我的代码返回了我不需要的东西,并且...
...事实上
ifelse()
甚至无法与<-
一起使用...
让我想知道是否有更好的方法来做到这一点。
是否有首选/更有效/更好的礼仪或以任何方式更合适的选项来有条件地赋值,或者我应该忽略困扰我的事情?
【问题讨论】:
我猜你需要反转,即letters %in% "B"
,因为所有参数都应该具有相同的长度。此外,letters
都是小写值。所以,你的逻辑应该是LETTERS %in% 'B'
如果您使用不同的长度,即 'B' %in% 个字母,更好的选择是if/else
即alphabet <- if('B' %in% letters) letters else LETTERS
@akrun 也许我不清楚:我想检查某个字母是小写还是大写。如果是小写,我想创建alphabet
并将letters
分配给它;如果是大写,我想将LETTERS
分配给它。这让我对在条件下使用letters
或LETTERS
无动于衷。我更新了问题,使其更清楚。无论如何,将letters %in% "B"
与<-
一起使用是行不通的,因为它给了我[1] "A" "b" "C" [...]
,带有小写的“b”。将letters %in% B
与assign()
一起使用就像在我的问题中一样有效,但它并不能消除我在问题中的第1 点。
你试过我显示的代码alphabet <- if('B' %in% letters) letters else LETTERS
@akrun 在您编辑之前我已经看到了您的评论。这样可以更整洁地完成工作,谢谢!
【参考方案1】:
我们可以用if/else
代替ifelse
alphabet <- if('B' %in% letters) letters else LETTERS
【讨论】:
以上是关于值的条件赋值 - ifelse() 当条件和预期的返回值没有相同的特征时是最好的吗? [R]的主要内容,如果未能解决你的问题,请参考以下文章