@@ -173,7 +173,7 @@ checkParentIDs <- function(ped, verbose = FALSE, repair = FALSE,
173173 }
174174 }
175175 }
176- if (addphantoms ) {
176+ if (addphantoms == TRUE ) {
177177 # Generate new IDs
178178 newIDbase <- if (is.numeric(ped $ ID )) max(ped $ ID , na.rm = TRUE ) + 1 else paste0(" phantom-" , seq_len(nrow(ped )))
179179 # Initialize a dataframe to store new entries
@@ -196,19 +196,38 @@ checkParentIDs <- function(ped, verbose = FALSE, repair = FALSE,
196196 newID <- if (is.numeric(ped $ ID )) newIDbase + added_counter else paste0(" phantom-dad-" , ped $ ID [idx ])
197197 added_counter <- added_counter + 1
198198 ped $ dadID [idx ] <- newID
199+ if (" famID" %in% names(ped )){
200+ newFAMID <- unique(ped $ famID [idx ])
201+ newFAMID <- newFAMID [! is.na(newFAMID )]
199202
200-
203+ new_entry <- addParentRow(new_entry_base , newID = newID , dadID = NA , momID = NA , sex = inferred_sex , famID = newFAMID )
204+ } else {
201205 new_entry <- addParentRow(new_entry_base , newID = newID , dadID = NA , momID = NA , sex = inferred_sex )
206+ }
202207 new_entries <- rbind(new_entries , new_entry )
203208 }
204209
205210 # Add moms when missing
206- inferred_sex <- if (length(validation_results $ female_var ) > 0 && ! is.na(validation_results $ female_var )) validation_results $ female_var else 0
211+ inferred_sex <- if (length(validation_results $ female_var ) > 0 && ! is.na(validation_results $ female_var )){
212+ validation_results $ female_var
213+ } else {
214+ 0
215+ }
216+
207217 for (idx in which(! is.na(ped $ dadID ) & is.na(ped $ momID ))) {
208218 newID <- if (is.numeric(ped $ ID )) newIDbase + added_counter else paste0(" phantom-mom-" , ped $ ID [idx ])
209219 added_counter <- added_counter + 1
210220 ped $ momID [idx ] <- newID
221+
222+ if (" famID" %in% names(ped )){
223+ newFAMID <- unique(ped $ famID [idx ])
224+ newFAMID <- newFAMID [! is.na(newFAMID )]
225+
226+ new_entry <- addParentRow(new_entry_base , newID = newID , dadID = NA , momID = NA , sex = inferred_sex , famID = newFAMID )
227+ } else {
228+
211229 new_entry <- addParentRow(new_entry_base , newID = newID , dadID = NA , momID = NA , sex = inferred_sex )
230+ }
212231 new_entries <- rbind(new_entries , new_entry )
213232 }
214233
@@ -300,7 +319,19 @@ addRowlessParents <- function(ped, verbose, validation_results) {
300319 )
301320 inferred_sex <- if (" mom" %in% role ) validation_results $ female_var else validation_results $ male_var
302321
303- new_entry <- addParentRow(new_entry_base , newID = pid , dadID = NA , momID = NA , sex = inferred_sex )
322+ if (" famID" %in% names(ped )){
323+ newFAMID <- unique(ped $ famID [which(ped $ momID == pid | ped $ dadID == pid )])
324+ newFAMID <- newFAMID [! is.na(newFAMID )]
325+
326+
327+ if (length(newFAMID ) > 1 ){
328+ newFAMID <- NA
329+ }
330+
331+ new_entry <- addParentRow(new_entry_base , newID = pid , dadID = NA , momID = NA , sex = inferred_sex , famID = newFAMID )
332+ } else {
333+ new_entry <- addParentRow(new_entry_base , newID = pid , dadID = NA , momID = NA , sex = inferred_sex )
334+ }
304335
305336 new_entries <- rbind(new_entries , new_entry )
306337 }
@@ -324,16 +355,24 @@ addRowlessParents <- function(ped, verbose, validation_results) {
324355# ' @param sex The new parent's sex value (e.g., 0 for female, 1 for male, or "F"/"M")
325356# ' @param momID The new parent's mother ID (default is NA)
326357# ' @param dadID The new parent's father ID (default is NA)
358+ # ' @param famID The new parent's family ID (default is NA)
327359# ' @return A single-row dataframe for the new parent
328360addParentRow <- function (template_row , newID , sex ,
329361 momID = NA ,
330- dadID = NA ) {
362+ dadID = NA ,
363+ famID = NA
364+ ) {
331365 new_row <- template_row
332366 new_row [] <- NA # set all columns to NA
333367 new_row $ ID <- newID
334- new_row $ momID <- NA
335- new_row $ dadID <- NA
368+ new_row $ momID <- momID
369+ new_row $ dadID <- dadID
336370 new_row $ sex <- sex
371+
372+ if (" famID" %in% names(template_row )) {
373+ new_row $ famID <- famID
374+ }
337375 # You can add more column initializations here if needed
376+
338377 return (new_row )
339378}
0 commit comments