Ошибка «нижний индекс выходит за границы» при попытке связать с файлом .md? Как исправить?

#r #dplyr #r-markdown

#r #dplyr #r-markdown

Вопрос:

похоже, в моем файле rmarkdown возникла проблема с вязанием этого конкретного фрагмента кода:

 library(tidyverse)

df <- data.frame(female = c("Republican", "Republican", "Democrat", "Democrat"),
                 male = c("Republican", "Democrat", "Republican", "Democrat"),
                 n = c(100, 50, 50, 150))

xtabs(n ~ female   male, df)
#             male
# female      Democrat     Republican
#  Democrat        150     50
#  Republican       50     100
  

Я пытаюсь вычислить вероятность того, что представительница женского пола будет с представителем мужского пола, и наоборот. Итак, в этом примере это было бы (100/150), но я не знаю, как это сделать в отношении переменных.

Я пробовал это:

 Fem <- colSums(df[ , "Republican", drop = FALSE] ) / sum(colSums(df))
Fem
Men <- rowSums(df["Republican", , drop = FALSE ] ) / sum(rowSums(df))
Men
  

Это отлично работает в коде и выдает вероятности, но отказывается компилироваться, когда я пытаюсь связать это с файлом md. В нем говорится:

 Error in `[.default`(df, , "Republican", drop = FALSE) : subscript out of bounds
Calls: <Anonymous> ... colSums -> -> is.data.frame -> [ -> [.table -> NextMethod
In addition: Warning messages:
1: package 'tidyverse' was built under R version 3.5.2
2: package 'tidyr' was built under R version 3.5.2
3: package 'forcats' was built under R version 3.5.2
Execution Halted
  

Кто-нибудь может помочь мне расшифровать, где я напортачил? Спасибо!

Комментарии:

1. df["Republican",] работает только при наличии имен строк, данные вашего образца — нет. Вы имеете в виду df[ df$female == "Republican",,drop=FALSE] ? (Работает ли этот код на консоли, независимо от rmarkdown? Я предлагаю при создании документов rmarkdown попробовать что-то на консоли, прежде чем пытаться автоматизировать и отобразить свой отчет.)

2. Предоставленный мной код хорошо работает для меня на консоли :/ Он автоматически сгенерировал для меня имена строк. Ваше решение выдает мне эту ошибку: «Ошибка в df $ female: оператор $ недопустим для атомарных векторов»

3. Должен быть код, которым вы не делитесь, поскольку эта ошибка возникает, когда df не является фреймом. Вы случайно перезаписываете с помощью df <- xtabs(...) ? Это довольно важно. Более того, data.frame такие имена строк не генерируются автоматически, и это единственное место, которое вы назначаете df .)

4. Я обещаю, что это весь код, который я использовал. И извините за tidyverse, я поместил его туда только потому, что знаю, что он загружен, и не знал, повлияет ли это на проблему.

5. Чего-то не хватает , в этом я уверен. Если вы начинаете новый сеанс R (не перезагружайте кэш! убедитесь, что среда пуста с ls() ), затем введите свой код, как вы его представляете здесь , вы получите ошибки или предупреждения, отличные от вашего вопроса. Ваше утверждение имеет смысл (пока) только в том случае, df<-data.frame(...) и затем df<-xtabs(...,data=df) . Кроме того, если это таблица, а не фрейм, df["Republican",,drop=F] вы получаете республиканцев, а не мужчин (или женщин), поэтому ваша итоговая статистика неверно информирует.