为何在R中使用ifelse语句调用write.csv()时会报错?
解决R中ifelse执行write.csv报错的问题
嘿,这个问题我碰到过!你之所以会报错,核心原因是**ifelse()函数是为向量化的元素级判断设计的,它要求两个分支返回长度、类型一致的结果**,但你现在用它来执行写入文件这种“有副作用”的操作就会出问题:write.csv()执行后返回的是NULL,而else分支的1+1返回的是数值2,两者的类型和长度完全不匹配,所以R就抛出了赋值错误。
正确的做法是用普通的if-else语句,因为你这里只是单条件的流程分支判断,不需要向量化处理:
my_data <- data.frame(fruits = c("orange","banana"), prices = c(2,3)) if (5 > 3) { write.csv(my_data, "mydata.csv", row.names = FALSE) } else { 1 + 1 }
简单区分下两者的适用场景:
- 普通
if语句是用来做流程控制的,适合这种“满足条件就执行某个操作,否则执行另一个”的场景 - 而
ifelse()更适合向量化赋值,比如给向量里的每个元素根据条件赋值:x <- ifelse(c(1,3,5) > 2, "big", "small")
这样修改后,代码就能正常执行,满足条件时会把数据写入mydata.csv文件啦!
内容的提问来源于stack exchange,提问作者Fouad Selmane
相关产品推荐
相关产品推荐

