如何在R语言循环用户输入中向Data Frame追加数据
解决R语言数据录入应用的追加功能问题
原代码的核心问题是每次录入数据时都会创建全新的数据框,没有保留历史数据。以下是修改后的可实现数据追加的代码:
# 初始化用于存储所有学生数据的空数据框 all_students <- data.frame( name = character(), parent_name = character(), address = character(), marks = numeric(), stringsAsFactors = FALSE ) stud_details <- function(current_data) { repeat { x <- readline(prompt = "Do you want to see the data frame of the details you entered (yes or no) : ") x <- tolower(x) if(x == "yes") { print(current_data) break } } } repeat{ first_input <- readline(prompt=" Do you want to enter any data (yes or no): ") first_input <- tolower(first_input) if(first_input == "yes") { name <- readline(prompt="Enter Name: ") parent_name <- readline(prompt="Enter Parent's Name: ") address <- readline(prompt="Enter Address: ") # 将成绩转为数值型,避免字符型存储带来的问题 marks <- as.numeric(readline(prompt="Enter Marks: ")) # 将新录入的单行数据转为数据框并追加到总数据中 new_entry <- data.frame( name = name, parent_name = parent_name, address = address, marks = marks, stringsAsFactors = FALSE ) all_students <<- rbind(all_students, new_entry) # 调用函数展示当前所有数据 stud_details(all_students) } else if (first_input == "no"){ break } }
关键修改点:
- 全局初始化空数据框
all_students,作为所有录入数据的存储容器 - 使用
<<-操作符在主循环中更新全局环境中的all_students,确保每次录入的数据都能被累积 - 将
marks转为数值型,符合成绩数据的类型要求 - 修改
stud_details函数,直接接收累积后的完整数据框进行展示,避免重复创建
内容的提问来源于stack exchange,提问作者Krishna Pardeshi
相关产品推荐
相关产品推荐

