R语言ifelse语句未生成预期重复向量的问题问询
解决R中ifelse返回单个值而非完整向量的问题
嘿,这个问题我太熟悉了!你遇到的是ifelse函数的一个典型特性——它是向量化的条件判断工具,和我们常用的普通if-else分支逻辑有着本质区别。
问题原因
你现在的测试条件substring(all_scn[1], 1, 1)=="C"是一个长度为1的逻辑值(要么是TRUE要么是FALSE)。而ifelse的工作逻辑是:针对测试条件的每一个元素,从对应位置的返回值里取一个元素。
当你写ifelse(..., rep(seq(0, last_step-1, 1), 13), ...)时,rep生成的是一个很长的向量,但因为测试条件只有1个元素,ifelse只会提取这个长向量的第一个元素,也就是0,这就是为什么你只得到了[1] 0的结果。
解决方案
因为你的条件是单元素的逻辑判断,完全不需要用向量化的ifelse,直接用普通的if-else分支就可以完美解决:
# 普通if-else分支,符合你的需求 if(substring(all_scn[1], 1, 1)=="C"){ rep(seq(0, last_step-1, 1), 13) } else { rep(seq(0, last_step-1, 1), 12) }
如果非要用ifelse(虽然没必要),可以把返回值包装成列表,再用unlist展开,这样ifelse会返回整个列表元素而不是单个值:
unlist(ifelse(substring(all_scn[1], 1, 1)=="C", list(rep(seq(0, last_step-1, 1), 13)), list(rep(seq(0, last_step-1, 1), 12))))
验证一下
单独执行rep(seq(0, last_step-1, 1), 13)能得到正确结果,说明rep和seq的逻辑没问题,核心就是换对判断工具就行~
内容的提问来源于stack exchange,提问作者umair durrani
相关产品推荐
相关产品推荐

