R脚本while循环异常:非首选项1时选选项1直接退出脚本
解决R脚本列处理功能选择循环的异常退出问题
问题场景
我写了一个用于CSV文件列格式调整的R脚本,包含以下可选子功能:
- 重命名列
- 删除列
- 查看列信息
- 保存文件
- 退出脚本
最初脚本是按顺序执行所有功能,无法重复操作,后来改用while循环实现功能自由选择与重复执行,但遇到了异常问题。
异常现象
- 如果先选择非重命名的选项(比如删除列),之后再选择选项1(重命名列),脚本会直接退出
- 但如果一开始就选选项1,后续的功能选择都能正常运行
错误代码示例
以下是导致异常的精简代码:
cond_col_fun <- 0 df <- read.csv("test.csv") while(cond_col_fun != 5) { cat("请选择功能:\n1. 重命名列\n2. 删除列\n3. 查看列信息\n4. 保存文件\n5. 退出\n") cond_col_fun <- as.integer(readline("输入选项:")) # 嵌套的while循环导致逻辑异常 while(cond_col_fun == 1) { old_col <- readline("输入要重命名的列名:") new_col <- readline("输入新列名:") names(df)[names(df) == old_col] <- new_col cat("列重命名完成!\n") cond_col_fun <- as.integer(readline("输入选项:")) } if(cond_col_fun == 2) { del_col <- readline("输入要删除的列名:") df <- df[, !names(df) %in% del_col] cat("列删除完成!\n") } # 其他功能逻辑省略 }
问题原因
嵌套的while(cond_col_fun == 1)循环会在重命名操作后直接获取新的选项值,打乱了外层循环的执行流程。当用户先执行其他功能再回到重命名时,这个嵌套循环的状态会导致外层循环的条件判断出现异常,最终触发脚本退出。
解决方案
将内部的while循环改为if语句,保留外层的while(cond_col_fun < 5)循环,确保每次功能执行完成后,都会回到功能选择界面,维持逻辑的一致性。
修正后的代码
cond_col_fun <- 0 df <- read.csv("test.csv") while(cond_col_fun < 5) { cat("请选择功能:\n1. 重命名列\n2. 删除列\n3. 查看列信息\n4. 保存文件\n5. 退出\n") cond_col_fun <- as.integer(readline("输入选项:")) if(cond_col_fun == 1) { old_col <- readline("输入要重命名的列名:") new_col <- readline("输入新列名:") names(df)[names(df) == old_col] <- new_col cat("列重命名完成!\n") } else if(cond_col_fun == 2) { del_col <- readline("输入要删除的列名:") df <- df[, !names(df) %in% del_col] cat("列删除完成!\n") } else if(cond_col_fun == 3) { cat("当前列信息:\n") print(names(df)) } else if(cond_col_fun == 4) { write.csv(df, "processed_test.csv", row.names = FALSE) cat("文件已保存!\n") } else if(cond_col_fun == 5) { cat("脚本退出\n") } else { cat("无效选项,请重新输入\n") } }
内容的提问来源于stack exchange,提问作者CecilF
相关产品推荐
相关产品推荐

