R语言for循环中ifelse报错:the condition has length >1 求助
解决R中
if条件长度大于1的报错问题 报错原因
你在for循环里直接使用scanning == "Full-Time"这类判断时,scanning是整个向量,返回的是长度与原向量一致的逻辑向量,而R的if语句仅能接受长度为1的条件,因此触发the condition has length >1报错。你需要针对循环中第i行的元素做判断,也就是给向量添加索引[i]。
修改后的循环代码
scanning.schools <- vector(mode="character", nrow(valid)) for (i in seq_len(nrow(school.safety))){ if (scanning[i] == "Full-Time" & scanning.incident[i] == "Y"){ scanning.schools[i] <- "Scanning Caught Crime" } else if (scanning[i] == "Full Time" & scanning.incident[i] == "N"){ scanning.schools[i] <- "Crime Occurred after Scanning" } }
更高效的向量化优化方案
R是向量型语言,逐元素的for循环效率较低,推荐使用向量化的判断函数:
- 基础包嵌套
ifelse:
scanning.schools <- ifelse( scanning == "Full-Time" & scanning.incident == "Y", "Scanning Caught Crime", ifelse( scanning == "Full Time" & scanning.incident == "N", "Crime Occurred after Scanning", NA_character_ # 处理不符合上述两个条件的情况,可按需修改 ) )
dplyr包的case_when(逻辑更清晰):
library(dplyr) scanning.schools <- case_when( scanning == "Full-Time" & scanning.incident == "Y" ~ "Scanning Caught Crime", scanning == "Full Time" & scanning.incident == "N" ~ "Crime Occurred after Scanning", TRUE ~ NA_character_ # 其他情况的默认值,可按需调整 )
内容的提问来源于stack exchange,提问作者grace
相关产品推荐
相关产品推荐

