【发布时间】:2018-08-11 14:49:05
【问题描述】:
我正在尝试在 R 中编写一个函数 1)遍历我的数据框中的一列,2)将该列的内容和另一列打印到屏幕上,3)接受用户输入的内容是可接受的,4)保留来自第 1 列或第 2 列的内容(如果用户决定它是正确的)或将用户更正的输入保存到新列中。
此任务的最后一步是我的函数卡住并且不产生任何输出。我正在调用的输出列已经存在于数据框中,但只是没有分配给它的值。如果我为要创建的新列指定新列名,那也不起作用,我想不出原因。
我尝试将用户输入分配给向量 (blabla) 以尝试调试代码,但即使这样也不起作用(无论是否在调用函数之前创建了输出对象,但理想情况下,输出对象应该是在函数内部创建)。当我使用特定的列单独运行 for 循环时,它执行得很顺利,所以我不知道为什么它不会在更通用的函数中运行。我没看到什么?这似乎是我如何尝试将输出分配给变量的问题,因为将其作为循环的最后一步打印到控制台工作正常,这意味着步骤 3 中的用户输入确实得到了正确处理。
我的函数编写技巧还不是很出色,所以我愿意接受有关如何使其更优雅的建议。我显然可以单独使用 for 循环来解决问题,因为它工作正常,但我想学习如何让函数执行操作。
Check_Content <- function(data, contentcol1, contentcol2, outputcol) {
#create output column:
data[[outputcol]] <- c()
for (i in 1:length(data[[contentcol1]])) {
#show content of columns that are to be checked:
print(c(data[[contentcol1]][i], data[[contentcol2]][i]))
#request userinput:
userinput <- readline("Type '1' for col1, '2' for col2 or correction: ")
#keep content from col 1 or 3 or new content
if (userinput == "1"){
output <- data[[contentcol1]][i]
} else if (userinput == "2"){
output <- data[[contentcol2]][i]
} else {
output <- userinput
}
#save output in multiple ways but none of them works except print:
data[[outputcol]][i] <- output #this works if the for loop is run on its own
data[[outputcol]][i] <- rbind(output) #this works if the for loop is run on its own
blabla[i] <- rbind(output)
print(output)
}
}
【问题讨论】: