Seite 1 von 1

Error in `purrr::pmap()`

Verfasst: Mo Jul 10, 2023 1:58 pm
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

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

Verfasst: Mo Jul 10, 2023 3:00 pm
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

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

Verfasst: Mo Jul 10, 2023 3:47 pm
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

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

Verfasst: Mo Jul 10, 2023 5:47 pm
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

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

Verfasst: Mi Jul 12, 2023 12:08 pm
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:

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

Verfasst: Mi Jul 12, 2023 12:46 pm
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