Error in `purrr::pmap()`

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
Mar204
Beiträge: 7
Registriert: Mo Mai 22, 2023 6:35 pm

Error in `purrr::pmap()`

Beitrag von Mar204 »

Hallo zusammen,
ich sitze gerade an einer Aufgabe und bekomme leider eine Fehlermeldung.
Weiß jemand woran das liegen könnte/wo mein fehler ist?

# Führe eine gemischte Zwei-Wege-ANOVA auf dem "anxiety" Datensatz aus dem "datarium" Paket durch. Die abhängige Variable ist der Angstscore, der zu drei verschiedenen Zeitpunkten (t1, t2, t3) gemessen wird. Die unabhängigen Variablen sind die Gruppen (grp1: basal, grp2: moderat, grp3: hoch) und die Zeit. Ziel ist es zu prüfen, ob es eine Interaktion zwischen Gruppe und Zeit bei der Erklärung des Angstscores gibt.

Code: Alles auswählen

install.packages("datarium")
install.packages("tidyverse")
install.packages("rstatix")
# Pakete laden
library(tidyverse)
library(datarium)
library(rstatix)
library(ggpubr)
# Daten laden und vorbereiten
set.seed(123)
data("anxiety", package = "datarium")
# Voraussetzungen prüfen
bxp <- ggboxplot(
  anxiety, x = "time", y = "score",
  color = "group", palette = "jco"
)
bxp
Ich erhalte folgende Fehlermeldung:

Code: Alles auswählen

Error in `purrr::pmap()`:
ℹ In index: 1.
ℹ With name: score.
Caused by error in `[[<-.data.frame`:
! Ersetzung hat 0 Zeilen, Daten haben 45
Run `rlang::last_trace()` to see where the error occurred.

> rlang::last_trace()
<error/purrr_error_indexed>
Error in `purrr::pmap()`:
ℹ In index: 1.
ℹ With name: score.
Caused by error in `[[<-.data.frame`:
! Ersetzung hat 0 Zeilen, Daten haben 45
---
Backtrace:
     ▆
  1. └─ggpubr::ggboxplot(...)
  2.   ├─base::do.call(.plotter, .opts)
  3.   └─ggpubr (local) `<fn>`(...)
  4.     └─purrr::pmap(...)
  5.       └─purrr:::pmap_("list", .l, .f, ..., .progress = .progress)
  6.         ├─purrr:::with_indexed_errors(...)
  7.         │ └─base::withCallingHandlers(...)
  8.         ├─purrr:::call_with_cleanup(...)
  9.         └─ggpubr (local) .f(...)
 10.           ├─base::`[[<-`(`*tmp*`, x, value = `<fct>`)
 11.           └─base::`[[<-.data.frame`(`*tmp*`, x, value = `<fct>`)
 12.             └─base::stop(...)
Run rlang::last_trace(drop = FALSE) to see 4 hidden frames.

> rlang::last_trace(drop = FALSE)
<error/purrr_error_indexed>
Error in `purrr::pmap()`:
ℹ In index: 1.
ℹ With name: score.
Caused by error in `[[<-.data.frame`:
! Ersetzung hat 0 Zeilen, Daten haben 45
---
Backtrace:
     ▆
  1. ├─ggpubr::ggboxplot(...)
  2. │ ├─base::do.call(.plotter, .opts)
  3. │ └─ggpubr (local) `<fn>`(...)
  4. │   └─purrr::pmap(...)
  5. │     └─purrr:::pmap_("list", .l, .f, ..., .progress = .progress)
  6. │       ├─purrr:::with_indexed_errors(...)
  7. │       │ └─base::withCallingHandlers(...)
  8. │       ├─purrr:::call_with_cleanup(...)
  9. │       └─ggpubr (local) .f(...)
 10. │         ├─base::`[[<-`(`*tmp*`, x, value = `<fct>`)
 11. │         └─base::`[[<-.data.frame`(`*tmp*`, x, value = `<fct>`)
 12. │           └─base::stop(...)
 13. └─base::.handleSimpleError(...)
 14.   └─purrr (local) h(simpleError(msg, call))
 15.     └─cli::cli_abort(...)
 16.       └─rlang::abort(...)
Über eure Hilfe würde ich mich sehr freuen.

Viele Grüße
Mar204
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in `purrr::pmap()`

Beitrag von bigben »

Hallo,

ich habe Null Erfahrung mit purrr oder mit ggboxplot, aber ich habe folgende Info über Deinen Datensatz gefunden: https://rpkgs.datanovia.com/datarium/re ... xiety.html

Demnach gibt es dort die Spalten id, group, t1, t2 und t3.

Demnach gibt es keine Spalten time und score.

Wenn das wirklich der Fehler sein sollte, dann muss ich zugeben, dass das keine wirklich hilfreiche Fehlermeldung für einen erwartbaren Fehler ist.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Mar204
Beiträge: 7
Registriert: Mo Mai 22, 2023 6:35 pm

Re: Error in `purrr::pmap()`

Beitrag von Mar204 »

Hallo Bernhard,
das könnte schon sein... Allerdings weis ich dann auch nicht wie ich es in diese Variablen einordne, sodass ich das gewünschte ergebnis erhalte.

Viele Grüße
Mar204
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in `purrr::pmap()`

Beitrag von bigben »

Du musst die Tabelle umschreiben. Derzeit stehen die Messwerte der Zeitpunkte in der Tabelle nebeneinander, Du willst sie untereinander stehen haben, sodass eine Spalte die Information enthält, ob ein Wert zu t1, t2 oder t3 gemessen wurde und eine andere Spalte, alle Werte enthält. Dann kannst Du die eine "time" nennen und die andere "score". Die Tabelle wird dadurch "schmaler" aber "länger". Es gibt verschiedene Wege, das in R zu erreichen.

Du hast diesen beim ersten Aufruf ewig brauchenden Befehl

Code: Alles auswählen

library(tidyverse)
in Deinem Code stehen. Damit werden unter anderem die Kommandos aus dem Paket tidyR für Dich nutzbar. Um eine Tabelle in die "längere" Form zu überführen gibt es in diesem Paket die Funktion "pivot_longer()".

Google mal ein wenig nach"tidyR pivot_longer", dann wirst Du Anleitungen finden, wie Du die Tabelle automatisiert in die lange Form überführen kannst.

Ab der nächsten Frage empfehle ich Dir, jeweils ein reproduzierbares Minimalbeispiel zu posten, darauf gibt es meistens die besten Antworten. Hinweise dazu in den Links in diesem Post: viewtopic.php?p=18183#p18183

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Error in `purrr::pmap()`

Beitrag von student »

Hallo mar204,

ich kenne mich ebenfalls mit purr nicht aus und versuche das Schlachtschiff tidyverse zu vermeiden. Darum habe ich basierend auf dem Video Boxplot mit R mit R-Base mal etwas schlankes gemacht:

Code: Alles auswählen

data("anxiety", package = "datarium")
View(anxiety)


## Grafische Darstellung der Merkmale in einem Bild:

par(mfrow=c(1,3)) # 2 * 4 Grafiken in einer Darstellung

for (i in 3:(ncol(anxiety))) {
  form <- as.formula(paste(names(anxiety)[i]," ~ group", sep=""))
  boxplot(form,data = anxiety, main= names(anxiety)[i])
  grid()
}

par(mfrow=c(1,1)) # Grafikparameter wieder auf eine Darstellung pro Window einstellen.
Heraus kommt folgender Boxplot:
Dateianhänge
Boxplot.png
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: Error in `purrr::pmap()`

Beitrag von bigben »

Ups, jetzt am anderen Rechner und nachdem student sich um Vereinfachung bemühth hat sehe ich auch, dass das reproduzierbar war. Nur halt kein Minimalbeispiel.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten