Добавить объект как строку в dataframe в R - PullRequest
1 голос
/ 25 июня 2019

У меня есть пустой DF:

CharactersDF <- data.frame(matrix(ncol = 7, nrow = 0))

И я создал новый класс:

 RPGcharacter <- function(name, level, rpgClass, race, HP, attack, resist){
   value <- list(name= name, level = level, rpgClass = rpgClass, HP = HP, attack = attack, resist = resist)
   attr(value, "class") <- "RPGcharacter"
   value
 }

А затем новый объект:

Artur <- RPGcharacter("Artur", 22, "Warlock", "Dwarf", 130, 12, 3)

Какдобавить объект в виде строки в этом пустом DF?Я пытался:

   CharactersDF <- rbind(CharactersDF, Artur)

, но я получил:

 Warning messages:
1: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  replacement element 1 has 1 row to replace 0 rows
2: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  replacement element 2 has 1 row to replace 0 rows
3: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  replacement element 3 has 1 row to replace 0 rows
4: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  replacement element 4 has 1 row to replace 0 rows
5: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  replacement element 5 has 1 row to replace 0 rows
6: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  replacement element 6 has 1 row to replace 0 rows
7: In `[<-.data.frame`(`*tmp*`, 1, value = list(name = "Artur", level = 22,  :
  provided 6 variables to replace 1 variables

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Хотя решение rbind работает, позаботьтесь о типах данных и структурах данных. Пустой CharactersDF является фреймом данных, который содержит логические типы

> CharactersDF <- data.frame(matrix(ncol = 7, nrow = 0))
> str(CharactersDF)
'data.frame':   0 obs. of  7 variables:
 $ X1: logi 
 $ X2: logi 

Артур - список, имеющий числовые и символьные типы

> Artur <- RPGcharacter("Artur", 22, "Warlock", "Dwarf", 130, 12, 3)
> str(Artur)
List of 6
 $ name    : chr "Artur"
 $ level   : num 22
 $ rpgClass: chr "Warlock"
 $ HP      : num 130
 $ attack  : num 12
 $ resist  : num 3
 - attr(*, "class")= chr "RPGcharacter"

И после rbind типы данных снова изменяются на числовые значения и коэффициенты.

> CharactersDF <- rbind(CharactersDF, Artur)
> str(CharactersDF)
'data.frame':   1 obs. of  6 variables:
 $ name    : Factor w/ 1 level "Artur": 1
 $ level   : num 22
 $ rpgClass: Factor w/ 1 level "Warlock": 1
 $ HP      : num 130
 $ attack  : num 12
 $ resist  : num 3 

Было бы безопаснее отработать нужные вам типы и работать с ними последовательно, либо преднамеренно принуждать их по мере необходимости.

Чтобы создать пустой фрейм данных с предварительно установленными типами, установите флажок Создать пустой фрейм данных. 1014 *

1 голос
/ 25 июня 2019

Как отметил Бен в своем комментарии, вы хотите использовать CharactersDF <- rbind(CharactersDF, Artur).

Вы используете функцию rbind для CharactersDF и Artur, поэтому вы используете rbind().Вы пытаетесь использовать синтаксис Python-esque, где точка означает, что вы вызываете свойство объекта CharactersDF.Здесь вы хотите вызвать rbind() для двух объектов и затем присвоить результат, где бы вы ни хотели его сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...