Skip to contents

This function converts any input type (data.frame or named list) into a standardized data frame with consistent columns for Manhattan plot visualization. Supports both GWAS-style (CHR, BP, P) and GRanges-style (seqnames, start, pvalue) column naming conventions with auto-detection.

Usage

process_manhattan_input(
  input,
  chr = NULL,
  bp = NULL,
  p = NULL,
  snp = NULL,
  track_labels = NULL
)

Arguments

input

Either a data frame or named list of data frames

chr

Column name for chromosome. If NULL, auto-detects from common names (CHR, chr, seqnames, chrom, chromosome). Default: NULL

bp

Column name for base pair position. If NULL, auto-detects from common names (BP, bp, start, pos, position, POS). Default: NULL

p

Column name for p-value. If NULL, auto-detects from common names (P, p, pvalue, p.value, pval). Default: NULL

snp

Column name for SNP identifier. If NULL, auto-detects from common names (SNP, snp, rsid, id, variant_id, marker). Default: NULL (optional column)

track_labels

Optional vector of track labels (used for unnamed list input)

Value

A data frame with standardized columns and optionally track column

Examples

# Data frame input with GWAS-style columns
df <- data.frame(CHR = 1, BP = 1:100, P = runif(100), SNP = paste0("rs", 1:100))
process_manhattan_input(df)
#>     CHR  BP          P   SNP
#> 1     1   1 0.97026228   rs1
#> 2     1   2 0.64808278   rs2
#> 3     1   3 0.05607304   rs3
#> 4     1   4 0.47313710   rs4
#> 5     1   5 0.29462501   rs5
#> 6     1   6 0.61029962   rs6
#> 7     1   7 0.12110888   rs7
#> 8     1   8 0.62941651   rs8
#> 9     1   9 0.71195530   rs9
#> 10    1  10 0.61208279  rs10
#> 11    1  11 0.03442923  rs11
#> 12    1  12 0.66589079  rs12
#> 13    1  13 0.65296728  rs13
#> 14    1  14 0.45185844  rs14
#> 15    1  15 0.51680410  rs15
#> 16    1  16 0.67661080  rs16
#> 17    1  17 0.88093309  rs17
#> 18    1  18 0.73122915  rs18
#> 19    1  19 0.39861982  rs19
#> 20    1  20 0.43052065  rs20
#> 21    1  21 0.14540735  rs21
#> 22    1  22 0.45112033  rs22
#> 23    1  23 0.57878149  rs23
#> 24    1  24 0.07041712  rs24
#> 25    1  25 0.74232618  rs25
#> 26    1  26 0.54922071  rs26
#> 27    1  27 0.63454427  rs27
#> 28    1  28 0.13662858  rs28
#> 29    1  29 0.93023350  rs29
#> 30    1  30 0.65111864  rs30
#> 31    1  31 0.52870927  rs31
#> 32    1  32 0.22511539  rs32
#> 33    1  33 0.98326687  rs33
#> 34    1  34 0.10904879  rs34
#> 35    1  35 0.06994552  rs35
#> 36    1  36 0.77764551  rs36
#> 37    1  37 0.65832223  rs37
#> 38    1  38 0.25920274  rs38
#> 39    1  39 0.91833784  rs39
#> 40    1  40 0.14871035  rs40
#> 41    1  41 0.64068048  rs41
#> 42    1  42 0.20123842  rs42
#> 43    1  43 0.74362132  rs43
#> 44    1  44 0.84763743  rs44
#> 45    1  45 0.85363587  rs45
#> 46    1  46 0.80341257  rs46
#> 47    1  47 0.02387676  rs47
#> 48    1  48 0.79537771  rs48
#> 49    1  49 0.88655051  rs49
#> 50    1  50 0.60003734  rs50
#> 51    1  51 0.43278817  rs51
#> 52    1  52 0.92027580  rs52
#> 53    1  53 0.61601443  rs53
#> 54    1  54 0.43571816  rs54
#> 55    1  55 0.89730441  rs55
#> 56    1  56 0.76901352  rs56
#> 57    1  57 0.12811576  rs57
#> 58    1  58 0.53863312  rs58
#> 59    1  59 0.12901623  rs59
#> 60    1  60 0.51096488  rs60
#> 61    1  61 0.54379269  rs61
#> 62    1  62 0.24177609  rs62
#> 63    1  63 0.80314412  rs63
#> 64    1  64 0.94791372  rs64
#> 65    1  65 0.40736135  rs65
#> 66    1  66 0.51474456  rs66
#> 67    1  67 0.98154185  rs67
#> 68    1  68 0.35418673  rs68
#> 69    1  69 0.45584015  rs69
#> 70    1  70 0.22002471  rs70
#> 71    1  71 0.08183302  rs71
#> 72    1  72 0.36923607  rs72
#> 73    1  73 0.12666658  rs73
#> 74    1  74 0.73987251  rs74
#> 75    1  75 0.95586629  rs75
#> 76    1  76 0.66867450  rs76
#> 77    1  77 0.46808935  rs77
#> 78    1  78 0.53819245  rs78
#> 79    1  79 0.33095370  rs79
#> 80    1  80 0.62868211  rs80
#> 81    1  81 0.45255247  rs81
#> 82    1  82 0.88801518  rs82
#> 83    1  83 0.78420182  rs83
#> 84    1  84 0.13805955  rs84
#> 85    1  85 0.28131306  rs85
#> 86    1  86 0.70694650  rs86
#> 87    1  87 0.44218692  rs87
#> 88    1  88 0.67769852  rs88
#> 89    1  89 0.70071499  rs89
#> 90    1  90 0.06840642  rs90
#> 91    1  91 0.95850352  rs91
#> 92    1  92 0.24448352  rs92
#> 93    1  93 0.92628333  rs93
#> 94    1  94 0.50274708  rs94
#> 95    1  95 0.93551714  rs95
#> 96    1  96 0.43879963  rs96
#> 97    1  97 0.35048654  rs97
#> 98    1  98 0.47650409  rs98
#> 99    1  99 0.96615953  rs99
#> 100   1 100 0.29716193 rs100

# Data frame input with GRanges-style columns
df2 <- data.frame(seqnames = "chr1", start = 1:100, pvalue = runif(100))
process_manhattan_input(df2)
#>     seqnames start     pvalue
#> 1       chr1     1 0.29064831
#> 2       chr1     2 0.85972225
#> 3       chr1     3 0.19331267
#> 4       chr1     4 0.80910837
#> 5       chr1     5 0.36548651
#> 6       chr1     6 0.25269965
#> 7       chr1     7 0.85608101
#> 8       chr1     8 0.13002437
#> 9       chr1     9 0.79190766
#> 10      chr1    10 0.35590151
#> 11      chr1    11 0.96434384
#> 12      chr1    12 0.11868321
#> 13      chr1    13 0.45816065
#> 14      chr1    14 0.52365044
#> 15      chr1    15 0.83706173
#> 16      chr1    16 0.03350404
#> 17      chr1    17 0.04332844
#> 18      chr1    18 0.79210294
#> 19      chr1    19 0.20269896
#> 20      chr1    20 0.06879545
#> 21      chr1    21 0.86444107
#> 22      chr1    22 0.07708986
#> 23      chr1    23 0.43100342
#> 24      chr1    24 0.97362256
#> 25      chr1    25 0.57095734
#> 26      chr1    26 0.75440665
#> 27      chr1    27 0.24245433
#> 28      chr1    28 0.62715787
#> 29      chr1    29 0.16841460
#> 30      chr1    30 0.44478963
#> 31      chr1    31 0.16467523
#> 32      chr1    32 0.11827678
#> 33      chr1    33 0.36746439
#> 34      chr1    34 0.94655891
#> 35      chr1    35 0.87541076
#> 36      chr1    36 0.26005891
#> 37      chr1    37 0.65729844
#> 38      chr1    38 0.12186463
#> 39      chr1    39 0.31884804
#> 40      chr1    40 0.62306103
#> 41      chr1    41 0.44699743
#> 42      chr1    42 0.70829345
#> 43      chr1    43 0.89002900
#> 44      chr1    44 0.10430650
#> 45      chr1    45 0.63041172
#> 46      chr1    46 0.84155891
#> 47      chr1    47 0.36426243
#> 48      chr1    48 0.62292278
#> 49      chr1    49 0.46074751
#> 50      chr1    50 0.16341228
#> 51      chr1    51 0.51386686
#> 52      chr1    52 0.14326644
#> 53      chr1    53 0.65029870
#> 54      chr1    54 0.15529453
#> 55      chr1    55 0.50830986
#> 56      chr1    56 0.08587044
#> 57      chr1    57 0.50302666
#> 58      chr1    58 0.03857188
#> 59      chr1    59 0.82403288
#> 60      chr1    60 0.28598557
#> 61      chr1    61 0.24675087
#> 62      chr1    62 0.39799359
#> 63      chr1    63 0.63209288
#> 64      chr1    64 0.94857885
#> 65      chr1    65 0.34011924
#> 66      chr1    66 0.62736599
#> 67      chr1    67 0.82491540
#> 68      chr1    68 0.14511538
#> 69      chr1    69 0.96713913
#> 70      chr1    70 0.08603899
#> 71      chr1    71 0.24046123
#> 72      chr1    72 0.63888373
#> 73      chr1    73 0.50339508
#> 74      chr1    74 0.25052326
#> 75      chr1    75 0.97903377
#> 76      chr1    76 0.65657958
#> 77      chr1    77 0.08984890
#> 78      chr1    78 0.63054293
#> 79      chr1    79 0.87676766
#> 80      chr1    80 0.93028154
#> 81      chr1    81 0.41948585
#> 82      chr1    82 0.49555987
#> 83      chr1    83 0.35270469
#> 84      chr1    84 0.24873487
#> 85      chr1    85 0.95872790
#> 86      chr1    86 0.35996012
#> 87      chr1    87 0.19898624
#> 88      chr1    88 0.72628532
#> 89      chr1    89 0.16813245
#> 90      chr1    90 0.22648133
#> 91      chr1    91 0.84554005
#> 92      chr1    92 0.34585360
#> 93      chr1    93 0.06731983
#> 94      chr1    94 0.02701945
#> 95      chr1    95 0.11804457
#> 96      chr1    96 0.01369537
#> 97      chr1    97 0.73572937
#> 98      chr1    98 0.92396077
#> 99      chr1    99 0.98219060
#> 100     chr1   100 0.40527020

# List input
data_list <- list("GWAS1" = df1, "GWAS2" = df2)
#> Error: object 'df1' not found
process_manhattan_input(data_list)
#> Error: object 'data_list' not found