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