Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

format_ae_listing(): AE duration set to NA (not "Unknown") for outcomes outside two hardcoded values

Aperta Adatta ai principianti
#159 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@yihui ci sta già lavorando.

Dal 23/9/2026.

  • #162 di @yihui — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
75/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
r
Ambito
data

Direzione di ricerca

Il bug si trova in R/ae_listing.R intorno alle righe 394-402 nella funzione format_ae_listing(). Per prima cosa, leggere la funzione per capire come vengono utilizzati ADURN e AEOUT. Quindi, creare un piccolo test per riprodurre il problema con gli esempi forniti. La correzione consiste nel sostituire le chiamate charmatch() con un test di appartenenza esatto utilizzando %in%. Dopo aver apportato la modifica, eseguire eventuali test esistenti per questa funzione per assicurarsi che la correzione funzioni e non interrompa altri comportamenti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

When ADURN is missing, format_ae_listing() derives the Duration value from AEOUT (R/ae_listing.R, around lines 394-402):

na_dur <- is.na(res[["ADURN"]])
if (any(na_dur)) {
  aeout_na <- toupper(res[["AEOUT"]][na_dur])
  res[["Duration"]][na_dur] <- ifelse(
    charmatch(aeout_na, "RECOVERING/RESOLVING") > 0 |
      charmatch(aeout_na, "NOT RECOVERED/NOT RESOLVED") > 0,
    "Continuing", "Unknown"
  )
}

Two problems with charmatch() here:

  1. NA leaks into the result. charmatch(x, table) returns NA when x matches nothing in table. For any outcome that is neither RECOVERING/RESOLVING nor NOT RECOVERED/NOT RESOLVED (e.g. FATAL, RECOVERED/RESOLVED), both charmatch() calls return NA, so the ifelse() condition is NA | NA = NA and ifelse(NA, ...) yields NA. The intended fallback "Unknown" is never reached for those rows.

  2. Silent prefix matching. charmatch() does partial (prefix) matching, so charmatch("R", "RECOVERING/RESOLVING") returns 1. An exact comparison was almost certainly intended.

Reproducer:

f <- function(aeout) ifelse(
  charmatch(aeout, "RECOVERING/RESOLVING") > 0 |
    charmatch(aeout, "NOT RECOVERED/NOT RESOLVED") > 0,
  "Continuing", "Unknown")
f("FATAL")               # NA   (expected "Unknown")
f("RECOVERED/RESOLVED")  # NA   (expected "Unknown")

Suggested fix: use an exact set-membership test instead of charmatch():

res[["Duration"]][na_dur] <- ifelse(
  aeout_na %in% c("RECOVERING/RESOLVING", "NOT RECOVERED/NOT RESOLVED"),
  "Continuing", "Unknown"
)

This affects normal, valid data whenever a subject has a missing AE duration and an outcome outside the two listed categories.

Lingua principale
R
Stelle
22
Fork
6
Merge medio
1g 8h
PR unite (30g)
9

Preparare l'ambiente

Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Merck/forestly

Tutte le issue di Merck/forestly

Issue simili

Altre issue su R

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.