Пожалуйста, кто-нибудь знает, почему я не могу сохранить данные внутри вектора в R? - PullRequest
0 голосов
/ 28 апреля 2020
checknames <- function(){
gamers <- c("Rebeca","Lucas","Mario")
games <- c("3","1","3")
scores <- c("200","100","205")
table <- data.frame(gamers,games,scores)
r=0
repeat{
 print("Name Player 1: ")
 name1=scan(,what="character",1)
 for(i in 1:length(gamers)){
   if(name1==gamers[i]){
     print("This player is already in the file. Would you like to change the name?")
     r=scan(,what="character",1)
   }
 }
 if(r==2){
   break
 }
 if(r==0){
   gamers=c(gamers,name1)
   name1 <- data.frame(gamers=name1,games="0",scores="100")
   table1 <- rbind(table,name1)
   print("Nice")
   break
 }
}
}
checknames()

Привет, я создал векторы с геймерами, играми и счетами, и я хочу спросить у пользователя имя, и если это имя отсутствует в векторе, я хочу добавить это новое имя в вектор, но я не могу спасти это, и я не знаю почему. Если кто-то знает, я буду благодарен всегда:)

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вот некоторые изменения в вашем коде:

  1. Создайте свою таблицу вне своей функции, если таблица не используется только внутри функции.
  2. Для количества игр и оценки это хороший подход к использованию чисел, а не строк.
  3. Вам не нужно l oop просматривать таблицу, чтобы проверить, существует ли заданное имя.
  4. Вернуть новую таблицу данных.
  5. Приведите вашу функцию с таблицей в качестве аргумента. Присвойте функцию таблице, чтобы сохранить изменения.
tbl_game <- data.frame(gamers = c("Rebeca","Lucas","Mario"),
                       games  = c(3, 1, 3),        # number of games not as string
                       scores = c(200, 100, 205))  # score not as string

checknames <- function(my_tbl){
  r <- 0
  repeat{
    print("Name Player 1: ")
    name1  <- scan(,what="character",1)
    if (name1 %in% my_tbl$gamers) {  # check if name is in table
      print("This player is already in the file. Would you like to change the name?")
      r <- scan(,what="character",1)
    }
    if(r==2){
      return(my_tbl)  # Return data with no changes
    }
    if(r==0){
      new_entry <- data.frame(gamers=name1, games=0, scores=100)
      my_tbl <- rbind(my_tbl, new_entry)
      print("Nice")
      return(my_tbl)  # Return data with new entry
    }
  }
}

checknames(tbl_game)  # perhaps assign it to tbl_game
0 голосов
/ 28 апреля 2020

Вы успешно добавляете имя в фрейм данных. Если вы хотите, чтобы результат был доступен после выполнения функции, вам нужно снова вызвать таблицу в конце функции.

checknames <- function(){
    code here
    table1 #to be returned
}
newTable <- checknames()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...