/plinkr

Work with PLINK from R

Primary LanguageRGNU General Public License v3.0GPL-3.0

plinkr

Branch GitHub Actions logo Codecov logo
master R-CMD-check codecov.io
develop R-CMD-check codecov.io

Work with PLINK and PLINK2 from R.

Installation

See doc/install.md

Examples

Running PLINK

plinkr can seamlessly run any PLINK or PLINK2 versions.

Run PLINK:

library(plinkr)
run_plink("--help")

To call a specific version of PLINK:

run_plink(c("--help", "--noweb"), create_plink_v1_7_options())
run_plink("--help", create_plink_v1_9_options())
run_plink("--help", create_plink_v2_0_options())

Of course, you can also call PLINK to detect genetic associations :-) :

# Use the PLINK v1.9 example files
plink_v1_9 <- create_plink_v1_9_options()
ped_filename <- get_plink_example_filename("toy.ped", plink_v1_9)
map_filename <- get_plink_example_filename("toy.map", plink_v1_9)

# Do a case-control association
plinkr::run_plink(
  args = c(
    "--ped", ped_filename, 
    "--map", map_filename
  )
)
  • See the vignette basic_usage for basic usage of PLINK, as taken from the PLINK website, which shows a quantitative trait analysis
  • See the vignette test_assoc_qt for the same basic usage of PLINK, using the plinkr interface
  • See the vignette demo_assoc_qt for doing a quantitative trait analysis using simulated data and the plinkr interface

Run a quantitative trait analysis on existing files

Read from PLINK text files

assoc_qt_data <- create_assoc_qt_data(
  data = create_plink_text_filenames(
    map_filename = get_plinkr_filename("demo_assoc_qt.map"), 
    ped_filename = get_plinkr_filename("demo_assoc_qt.ped")
  ),
  phenotype_data = create_phenotype_data_filename(
    phe_filename = get_plinkr_filename("demo_assoc_qt.phe")  
  )
)
assoc_qt_filenames <- assoc_qt(assoc_qt_data = assoc_qt_data)
read_plink_qassoc_file(assoc_qt_filenames$qassoc_filenames[1])

Read from PLINK binary files

assoc_qt_data <- create_assoc_qt_data(
  data = create_plink_bin_filenames(
    bed_filename = get_plinkr_filename("demo_assoc_qt.bed"), 
    bim_filename = get_plinkr_filename("demo_assoc_qt.bim"), 
    fam_filename = get_plinkr_filename("demo_assoc_qt.fam")
  ),
  phenotype_data = create_phenotype_data_filename(
    phe_filename = get_plinkr_filename("demo_assoc_qt.phe")  
  )
)
assoc_qt_filenames <- assoc_qt(assoc_qt_data = assoc_qt_data)
read_plink_qassoc_file(assoc_qt_filenames$qassoc_filenames[1])

Demonstrate a quantitative trait analysis

plinkr can seamlessly use PLINK/PLINK2 in-memory-data or files.

assoc_qt_data <- create_demo_assoc_qt_data()

# Prove that this is PLINK text data
check_plink_text_data(assoc_qt_data$data)

assoc_qt_params <- create_test_assoc_qt_params()
assoc_qt(
  assoc_qt_data = assoc_qt_data,
  assoc_qt_params = assoc_qt_params
)

To convert the in-memory data to PLINK binary format and do the same quantitative trait analysis:

assoc_qt_data$data <- convert_plink_text_data_to_plink_bin_data(
  assoc_qt_data$data
)

# Prove that this is PLINK binary data
check_plink_bin_data(assoc_qt_data$data)

assoc_qt(
  assoc_qt_data = assoc_qt_data,
  assoc_qt_params = assoc_qt_params
)
  • See the vignette demo_assoc_qt for a walk-through of the data that is simulated by default
  • See the vignette create_demo_assoc_qt_params for many examples how data can be simulated

File I/O

plinkr can read and save many types of PLINK files. Below is an overview. List from the PLINK file format reference.

File extension plink read function
.adjusted read_plink_adjusted_file
.allele.no.snp 🚧
.assoc read_plink_assoc_file
.assoc.adjusted read_plink_assoc_adjusted_file
.assoc.dosage 🚧
.assoc.fisher 🚧
.assoc.linear 🚧
.assoc.logistic 🚧
.auto.R 🚧
.bcf 🚧
.beagle.dat 🚧
.bed read_plink_bed_file
.bim read_plink_bin_file
PLINK binary data read_plink_bin_data
PLINK2 binary data read_plink2_bin_data
.blocks* 🚧
.chr-*.dat 🚧
.chr-*.map 🚧
.clst 🚧
.clumped* 🚧
.cluster* 🚧
.cmh 🚧
.cmh2 🚧
.cnv 🚧
.cnv.indiv 🚧
.cnv.overlap 🚧
.cnv.summary 🚧
.cov read_plink_cov_file
.dfam 🚧
.diff 🚧
.dist 🚧
.dupvar 🚧
.eigenvec* 🚧
.epi.* 🚧
.fam read_plink_fam_file
.flipscan 🚧
.frq read_plink_frq_file
.frq.cc 🚧
.frq.count 🚧
.frq.strat read_plink_frq_strat_file
.frqx 🚧
.fst 🚧
.gen 🚧
.genome 🚧
.grm 🚧
.grm.N.bin 🚧
.grm.bin 🚧
.gvar 🚧
.het 🚧
.hh 🚧
.hom 🚧
.hom.indiv 🚧
.hom.overlap* 🚧
.hom.summary 🚧
.homog 🚧
.hwe 🚧
.ibc 🚧
.imiss read_plink_imiss_file
.info 🚧
.lasso 🚧
.ld read_plink_ld_file
.ldset 🚧
.lgen 🚧
.list 🚧
.lmiss read_plink_lmiss_file
.log read_plink_log_file
.map read_plink_map_file
.mdist 🚧
.mdist.missing 🚧
.mds 🚧
.*mendel 🚧
.meta 🚧
.mibs 🚧
.missing 🚧
.missing.hap 🚧
.model 🚧
.mperm 🚧
.nearest 🚧
.occur.dosage 🚧
.out.dosage 🚧
.ped read_plink_ped_file
.perm 🚧
.phe read_plink_phe_file
.pphe 🚧
.prob 🚧
.profile 🚧
.qassoc read_plink_qassoc_file
.qassoc.gxe 🚧
.qassoc.means 🚧
.qfam.* 🚧
.range.report 🚧
.raw 🚧
.recode.*.txt 🚧
.recode.phase.inp 🚧
.recode.strct_in 🚧
.ref 🚧
.rel 🚧
.rlist 🚧
.sample 🚧
.set 🚧
.set.{perm,mperm} 🚧
.set.table 🚧
.sexcheck 🚧
.simfreq read_plink_simfreq_file
.tags.list 🚧
.tdt 🚧
.tdt.poo 🚧
PLINK text data read_plink_text_data
.tfam 🚧
.tped 🚧
.traw 🚧
.twolocus 🚧
.var.ranges 🚧
.vcf 🚧

Associations

Association type Data type General function Specialized function
Case-control PLINK1 text data assoc assoc_on_plink_text_data
Case-control PLINK1 bin data assoc assoc_on_plink_bin_data
Case-control PLINK2 bin data assoc assoc_on_plink2_bin_data
Case-control PLINK1 text files assoc 🚧 assoc_on_plink_text_files 🚧
Case-control PLINK1 bin files assoc 🚧 assoc_on_plink_bin_files 🚧
Case-control PLINK2 bin files assoc 🚧 assoc_on_plink2_bin_files 🚧
Quantitative PLINK1 text data assoc_qt assoc_qt_on_plink_text_data
Quantitative PLINK1 bin data assoc_qt assoc_qt_on_plink_bin_data
Quantitative PLINK2 bin data assoc_qt assoc_qt_on_plink2_bin_data
Quantitative PLINK1 text files assoc_qt 🚧 assoc_qt_on_plink_text_files 🚧
Quantitative PLINK1 bin files assoc_qt 🚧 assoc_qt_on_plink_bin_files 🚧
Quantitative PLINK2 bin files assoc_qt 🚧 assoc_qt_on_plink2_bin_files 🚧

PLINK and PLINK2 files conversions

plinkr allows to convert between any PLINK and PLINK2 files.

From To Function name
PLINK1 text files PLINK1 binary files convert_plink_text_files_to_plink_bin_files
PLINK1 text files PLINK2 binary files convert_plink_text_files_to_plink2_bin_files
PLINK1 binary files PLINK text files convert_plink_bin_files_to_plink_text_files
PLINK1 binary files PLINK2 binary files convert_plink_bin_files_to_plink2_bin_files
PLINK2 binary files PLINK text files convert_plink2_bin_files_to_plink_text_files 🚧
PLINK2 binary files PLINK binary files convert_plink2_bin_files_to_plink_bin_files
🚧 🚧 🚧
any type of files PLINK text files convert_files_to_plink_text_files 🚧
any type of files PLINK1 binary files convert_files_to_plink_bin_files 🚧
any type of files PLINK2 binary files convert_files_to_plink2_bin_files 🚧
PLINK1 binary files SAIGE files create_bgen_files_for_saige 🚧
PLINK1 binary files PLINK2 VCF files convert_plink_bin_files_to_plink_vcf_files 🚧

PLINK and PLINK2 data conversions

plinkr allows to convert between any PLINK and PLINK2 data.

From To Function name
PLINK1 text data PLINK1 binary data convert_plink_text_data_to_plink_bin_data
PLINK1 text data PLINK2 binary data convert_plink_text_data_to_plink2_bin_data
PLINK1 binary data PLINK text data convert_plink_bin_data_to_plink_text_data 🚧
PLINK1 binary data PLINK2 binary data convert_plink_bin_data_to_plink2_bin_data
PLINK2 binary data PLINK text data convert_plink2_bin_data_to_plink_text_data 🚧
PLINK2 binary data PLINK binary data convert_plink2_bin_data_to_plink_bin_data

Singularity container

FAQ

See doc/faq.md