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.551250528   rs1
#> 2     1   2 0.075599100   rs2
#> 3     1   3 0.022700011   rs3
#> 4     1   4 0.513239528   rs4
#> 5     1   5 0.630726152   rs5
#> 6     1   6 0.418771624   rs6
#> 7     1   7 0.879265945   rs7
#> 8     1   8 0.107987073   rs8
#> 9     1   9 0.980278696   rs9
#> 10    1  10 0.264966631  rs10
#> 11    1  11 0.084277523  rs11
#> 12    1  12 0.385907176  rs12
#> 13    1  13 0.124895827  rs13
#> 14    1  14 0.581554222  rs14
#> 15    1  15 0.240149608  rs15
#> 16    1  16 0.721887889  rs16
#> 17    1  17 0.145928691  rs17
#> 18    1  18 0.152838770  rs18
#> 19    1  19 0.259222670  rs19
#> 20    1  20 0.777886260  rs20
#> 21    1  21 0.426466300  rs21
#> 22    1  22 0.060048336  rs22
#> 23    1  23 0.114832537  rs23
#> 24    1  24 0.482756897  rs24
#> 25    1  25 0.979173584  rs25
#> 26    1  26 0.811516787  rs26
#> 27    1  27 0.542912817  rs27
#> 28    1  28 0.072367087  rs28
#> 29    1  29 0.466485246  rs29
#> 30    1  30 0.339905646  rs30
#> 31    1  31 0.689918605  rs31
#> 32    1  32 0.514157372  rs32
#> 33    1  33 0.514923016  rs33
#> 34    1  34 0.545514354  rs34
#> 35    1  35 0.447457330  rs35
#> 36    1  36 0.083884840  rs36
#> 37    1  37 0.930133692  rs37
#> 38    1  38 0.016448186  rs38
#> 39    1  39 0.414092399  rs39
#> 40    1  40 0.226976093  rs40
#> 41    1  41 0.099640587  rs41
#> 42    1  42 0.482923875  rs42
#> 43    1  43 0.650128671  rs43
#> 44    1  44 0.921329778  rs44
#> 45    1  45 0.362601807  rs45
#> 46    1  46 0.855134990  rs46
#> 47    1  47 0.300906152  rs47
#> 48    1  48 0.465662425  rs48
#> 49    1  49 0.142730665  rs49
#> 50    1  50 0.807718994  rs50
#> 51    1  51 0.665807632  rs51
#> 52    1  52 0.061940980  rs52
#> 53    1  53 0.430925568  rs53
#> 54    1  54 0.396855081  rs54
#> 55    1  55 0.696956751  rs55
#> 56    1  56 0.659319651  rs56
#> 57    1  57 0.407350710  rs57
#> 58    1  58 0.306920220  rs58
#> 59    1  59 0.255107345  rs59
#> 60    1  60 0.672568153  rs60
#> 61    1  61 0.894393434  rs61
#> 62    1  62 0.845736156  rs62
#> 63    1  63 0.392901857  rs63
#> 64    1  64 0.079050540  rs64
#> 65    1  65 0.828423057  rs65
#> 66    1  66 0.072891825  rs66
#> 67    1  67 0.114762678  rs67
#> 68    1  68 0.639984270  rs68
#> 69    1  69 0.320566200  rs69
#> 70    1  70 0.188749526  rs70
#> 71    1  71 0.393829641  rs71
#> 72    1  72 0.862026016  rs72
#> 73    1  73 0.347911407  rs73
#> 74    1  74 0.001433898  rs74
#> 75    1  75 0.911284454  rs75
#> 76    1  76 0.951723449  rs76
#> 77    1  77 0.490918983  rs77
#> 78    1  78 0.463651715  rs78
#> 79    1  79 0.596472047  rs79
#> 80    1  80 0.906050957  rs80
#> 81    1  81 0.173001179  rs81
#> 82    1  82 0.785881077  rs82
#> 83    1  83 0.232934385  rs83
#> 84    1  84 0.577048209  rs84
#> 85    1  85 0.840877033  rs85
#> 86    1  86 0.132203777  rs86
#> 87    1  87 0.895891190  rs87
#> 88    1  88 0.450137341  rs88
#> 89    1  89 0.894142538  rs89
#> 90    1  90 0.248545181  rs90
#> 91    1  91 0.083695294  rs91
#> 92    1  92 0.048641075  rs92
#> 93    1  93 0.979815867  rs93
#> 94    1  94 0.484167741  rs94
#> 95    1  95 0.845393034  rs95
#> 96    1  96 0.416293605  rs96
#> 97    1  97 0.489342543  rs97
#> 98    1  98 0.183287818  rs98
#> 99    1  99 0.759161468  rs99
#> 100   1 100 0.305143303 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.1656782471
#> 2       chr1     2 0.0328091430
#> 3       chr1     3 0.1365052082
#> 4       chr1     4 0.1771364114
#> 5       chr1     5 0.5195604505
#> 6       chr1     6 0.8111207851
#> 7       chr1     7 0.1153620125
#> 8       chr1     8 0.8934217866
#> 9       chr1     9 0.5753528811
#> 10      chr1    10 0.1465723943
#> 11      chr1    11 0.9028057964
#> 12      chr1    12 0.2530024694
#> 13      chr1    13 0.1505976003
#> 14      chr1    14 0.7685471599
#> 15      chr1    15 0.2301233311
#> 16      chr1    16 0.3053993280
#> 17      chr1    17 0.5185696122
#> 18      chr1    18 0.3345996668
#> 19      chr1    19 0.1544349683
#> 20      chr1    20 0.2663695686
#> 21      chr1    21 0.3507546168
#> 22      chr1    22 0.5784583788
#> 23      chr1    23 0.8086017952
#> 24      chr1    24 0.9332703149
#> 25      chr1    25 0.8338633375
#> 26      chr1    26 0.1270027745
#> 27      chr1    27 0.6494539515
#> 28      chr1    28 0.6903516576
#> 29      chr1    29 0.0320448244
#> 30      chr1    30 0.9204891499
#> 31      chr1    31 0.4784688870
#> 32      chr1    32 0.2665205784
#> 33      chr1    33 0.8565107163
#> 34      chr1    34 0.2291464778
#> 35      chr1    35 0.7919468733
#> 36      chr1    36 0.6467748603
#> 37      chr1    37 0.4243346907
#> 38      chr1    38 0.0950682680
#> 39      chr1    39 0.0034677039
#> 40      chr1    40 0.5311336690
#> 41      chr1    41 0.5243071159
#> 42      chr1    42 0.2131855546
#> 43      chr1    43 0.7169320800
#> 44      chr1    44 0.9613435762
#> 45      chr1    45 0.5182665996
#> 46      chr1    46 0.1745280223
#> 47      chr1    47 0.5625401349
#> 48      chr1    48 0.7592581697
#> 49      chr1    49 0.6669713375
#> 50      chr1    50 0.2248729232
#> 51      chr1    51 0.3458497624
#> 52      chr1    52 0.3198317599
#> 53      chr1    53 0.9048983976
#> 54      chr1    54 0.1991983801
#> 55      chr1    55 0.6809630166
#> 56      chr1    56 0.1375177586
#> 57      chr1    57 0.1069946869
#> 58      chr1    58 0.0928593958
#> 59      chr1    59 0.9164489552
#> 60      chr1    60 0.2770604359
#> 61      chr1    61 0.8857938773
#> 62      chr1    62 0.7728646495
#> 63      chr1    63 0.7950512362
#> 64      chr1    64 0.2056735931
#> 65      chr1    65 0.0481933230
#> 66      chr1    66 0.0388159312
#> 67      chr1    67 0.2845741299
#> 68      chr1    68 0.3488098325
#> 69      chr1    69 0.7374533254
#> 70      chr1    70 0.2516635812
#> 71      chr1    71 0.5174370031
#> 72      chr1    72 0.7594447227
#> 73      chr1    73 0.6360845279
#> 74      chr1    74 0.2039406854
#> 75      chr1    75 0.9930452821
#> 76      chr1    76 0.0004050434
#> 77      chr1    77 0.2065700251
#> 78      chr1    78 0.6340280906
#> 79      chr1    79 0.0172918253
#> 80      chr1    80 0.0267354713
#> 81      chr1    81 0.6078405951
#> 82      chr1    82 0.5705413527
#> 83      chr1    83 0.2458533479
#> 84      chr1    84 0.9195250864
#> 85      chr1    85 0.6722162017
#> 86      chr1    86 0.6454504393
#> 87      chr1    87 0.2082854547
#> 88      chr1    88 0.4806177358
#> 89      chr1    89 0.9865185833
#> 90      chr1    90 0.9931198477
#> 91      chr1    91 0.4507740366
#> 92      chr1    92 0.7148487861
#> 93      chr1    93 0.3165616125
#> 94      chr1    94 0.8336875606
#> 95      chr1    95 0.4339755815
#> 96      chr1    96 0.9959922582
#> 97      chr1    97 0.8058112133
#> 98      chr1    98 0.4862421674
#> 99      chr1    99 0.5387720009
#> 100     chr1   100 0.3410399084

# 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