当我最初编写脚本时,它要求用户先完成所有子功能,然后才能将重新格式化的数据保存为新的 csv 文件,并且不允许用户重复子功能(例如,删除更多多于一列)。然后,我使用 while 循环重写了它,以便向用户提供子函数的编号列表,并可以选择要使用的子函数。子功能可以按任何顺序使用并重复使用任意次数。
在另一个脚本中,我使用了 while 循环来达到相同的目的,并且效果很好。但是,由于某种原因,当我运行此脚本时,while 循环无法正确循环。
这是我的脚本的精简版本,因为发布完整内容太长了:
col_opt <- c("Options:", "1. rename columns", "2. delete columns", "3. merge 2 columns", "4. split a column", "5. finish")
cat(col_opt, sep = "\n")
cond_col_fun <- readline("Enter option number: ")
while(cond_col_fun == "1" | cond_col_fun == "one"){
# code to rename columns
cat(col_opt, sep = "\n")
cond_col_fun <- readline("Enter option number: ")
}
while(cond_col_fun == "2" | cond_col_fun == "two"){
# code to delete columns
cat(col_opt, sep = "\n")
cond_col_fun <- readline("Enter option number: ")
}
# same while loop repeats for options 3 & 4
while(cond_col_fun == "5" | cond_col_fun == "five"){
# code to reorder columns & write as new csv file
break
}
当我运行脚本时,我可以首先选择选项 1(重命名列),然后选择任何选项,重复任何其他选项,并完成写入新的 csv 文件。但是,如果我首先选择任何其他选项,然后尝试选择选项 1(重命名列),它只会退出脚本。在控制台中看起来像这样:
Options:
1. rename columns
2. delete columns
3. merge 2 columns
4. split a column
5. finish
Enter option number: 2
# code runs to delete a column, based on user inputs
Options:
1. rename columns
2. delete columns
3. merge 2 columns
4. split a column
5. finish
Enter option number: 1
>
循环“while(cond_col_fun == "1" | cond_col_fun == "one")”中没有任何内容可以使其退出脚本,因为如果这是第一个子函数运行,则脚本可以完美运行。我已经把我的脚本读了几十遍,并一遍又一遍地修改它,但由于某种原因, while 循环不想正常工作。如果有人知道为什么会发生这种情况或如何解决它,我将非常感激。我有一个更复杂的脚本,带有一个可以正常工作的多嵌套循环,所以这个有点简单的脚本让我难住了,这让我发疯。
编辑:问题已解决。添加初始 while 循环
while(cond_col_fun < 5)
并将 while 循环更改为 if 语句修复了该问题。
while(cond_col_fun < 5)
并将现有的 while 循环更改为 if 语句修复了它。