Process Manhattan plot input into standardized data frame
Source:R/helpers_manhattan.R
process_manhattan_input.RdThis 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)
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