R语言使用beepr库在ifelse中调用beep()报错如何解决
错误原因
ifelse是R的向量化函数,设计逻辑要求两个分支(yes、no)的返回值必须是支持向量化复制的对象。而beepr包的beep()函数返回值为externalptr(外部指针)类型,这类对象无法被rep()函数执行复制操作,ifelse运行时会默认尝试将返回值复制到和判断条件等长的长度,因此触发报错。- 额外注意:
ifelse运行时会同时计算两个分支的所有表达式,哪怕你的判断条件只有单个逻辑值,你写的原有代码就算不报类型错误,也会同时触发两个音效,根本达不到按条件播放对应音效的效果。
解决方法
替换为R原生的if(){}else{}分支结构即可,该结构仅会在条件成立时执行对应分支的代码,不会强制要求返回值支持向量化,也不会同时计算两个分支的内容:
library(beepr) test <- data.frame(a = 1, b = 2) if (test$b == 2) { beep(1) } else { beep(2) }
如果需要处理多元素的判断条件(比如批量对多个值做判断播放音效),可以配合循环或者迭代类函数使用,不要用ifelse调用beep()。
内容的提问来源于stack exchange,提问作者Peter Cole
相关产品推荐
相关产品推荐

