【问题标题】:How do I append to a data frame in a user input in loop如何在循环中附加到用户输入中的数据框
【发布时间】:2022-11-13 13:38:11
【问题描述】:

我正在用 r 创建一种数据输入应用程序 这是代码,

stud_details <- function(name, parent_name, address, marks){
  repeat {
    details_frame = data.frame(name, parent_name, address, marks)
    details_frame = rbind(details_frame)
    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(details_frame)
      break
    }
  }
}

repeat{
  first_input = readline(prompt=" Do you want to enter any data (yes or no): ")
  if(first_input == "yes")
  {
    name = c((readline(prompt="Enter Name: ")))
    parent_name = c(readline(prompt="Enter Parent's Name: "))
    address = c(readline(prompt="Enter Address: "))
    marks = c(readline(prompt="Enter Marks: "))
    stud_details(name, parent_name, address, marks)
  }
  else if (first_input == "no"){
    break
  }
}

所以这段代码基本上是向用户询问学生数据,然后数据框。 它这样做了,但问题是当我们再次输入数据时,它会替换之前输入的数据。 我尝试使用 4 个变量创建一个列表,但不起作用。

我希望它应该附加数据。

p.s. [一旦我得到这个将使代码变得更好:)]

【问题讨论】:

    标签: r list dataframe function user-input


    【解决方案1】:

    使您的代码工作的一种选择是首先为您的学生数据创建一个空数据框。然后,在您的循环中,您可以将用户输入的数据附加到此数据框中。为此,我重写了您的student_detail 函数。首先,不需要循环。其次,返回details_frame

    student_data <- data.frame(name = character(0), parent_name = character(0), address = character(0), marks = character(0))
    
    stud_details <- function(name, parent_name, address, marks) {
      details_frame <- data.frame(name, parent_name, address, marks)
      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(details_frame)
      }
      return(details_frame)
    }
    
    repeat{
      first_input <- readline(prompt = " Do you want to enter any data (yes or no): ")
      if (first_input == "yes") {
        name <- c((readline(prompt = "Enter Name: ")))
        parent_name <- c(readline(prompt = "Enter Parent's Name: "))
        address <- c(readline(prompt = "Enter Address: "))
        marks <- c(readline(prompt = "Enter Marks: "))
        details_frame <- stud_details(name, parent_name, address, marks)
        student_data <- rbind.data.frame(student_data, details_frame)
      } else if (first_input == "no") {
        break
      }
    }
    
    student_data
    

    这是运行代码并为两个学生添加数据时运行的一个小示例:

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 1970-01-01
      • 2021-09-22
      • 2018-06-17
      • 1970-01-01
      • 2021-02-05
      • 2016-07-24
      • 2019-12-01
      • 2019-07-12
      相关资源
      最近更新 更多