Introduction to the Command Line (Terminal)

Gepoliano Chaves, Ph. D.

September 9th, 2023

0) Git clone GitHub repository in the VM Desktop

  • This command should be entered at the terminal in your Virtual Machine.
git clone https://github.com/gepolianochaves/bioinformatics-bridge-course

1. Introducing the Shell

print working directory

pwd
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts

list

ls
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## test folder

1. Introducing the Shell (continued)

command not found

pws

3. Working With Files and Directories

  • Create a directory using the mkdir command
mkdir -p thesis

3. Working With Files and Directories (continued)

  • List the files in the current directory. If the option -a is included, folders are included as well
ls -F -a
## ./
## ../
## .DS_Store
## .Rhistory
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## test folder/
## thesis/

3. Working With Files and Directories (continued)

  • Let’s check what is the current directory and change our working directory to test using cd

  • Then run a text editor called Touch to create a file called draft.txt.

  • Finally, we will check that we created the file with the ls command:

3. Working With Files and Directories (continued)

pwd
cd thesis
touch draft.txt
ls
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts
## draft.txt

3. Working With Files and Directories (continued)

  • Let’s go back to the scripts folder
# check the current directory
pwd
# change to the test directory
cd ./thesis
# check the current directory
pwd
# change to the scripts directory
cd ../
# check the current directory
pwd
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts/thesis
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts

3. Working With Files and Directories (continued)

# check the current directory
pwd
# Move draft.txt to current directory
mv ./thesis/draft.txt ./
# List current directory
ls
# Move draft.txt back to ./thesis
mv draft.txt ./thesis/
# change to thesis directory 
cd ./thesis
# List current directory and confirm draft there
ls
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## draft.txt
## test folder
## thesis
## draft.txt

3. Working With Files and Directories (continued)

  • Removing files and directories
ls ./thesis/draft.txt
rm ./thesis/draft.txt
ls ./thesis/draft.txt
ls ./thesis/
du -sh ./thesis/
## ./thesis/draft.txt
## ls: ./thesis/draft.txt: No such file or directory
##   0B ./thesis/

3. Working With Files and Directories (continued)

  • Removing the thesis directory
ls
echo "Not using the -r option:"
rm thesis
ls
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## test folder
## thesis
## Not using the -r option:
## rm: thesis: is a directory
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## test folder
## thesis

3. Working With Files and Directories (continued)

ls
echo "Using the -r option:"
rm -r thesis
ls
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## test folder
## thesis
## Using the -r option:
## Introduction to R and Terminal.Rmd
## Introduction to the Terminal.Rmd
## Introduction-to-R-and-Terminal.html
## Introduction-to-the-Terminal.Rmd
## Introduction-to-the-Terminal.html
## test folder

4. Pipes and Filters

  • wc counts lines, words, and characters in its inputs.

  • cat displays the contents of its inputs.

  • sort sorts its inputs.

  • head displays the first 10 lines of its input.

4. Pipes and Filters (continued)

  • tail displays the last 10 lines of its input.

  • command > [file] redirects a command’s output to a file (overwriting any existing content).

  • command >> [file] appends a command’s output to a file.

  • [first] | [second] is a pipeline: the output of the first command is used as the input to the second.

  • The best way to use the shell is to use pipes to combine simple single-purpose programs (filters).

5. Loops

  • Let’s count how many FASTA files are there in the fasta folder of the brazil region for 2020

  • We will use a for loop used in the

  • We will come across this again in the Variant Call Pipeline that we will study

5. Loops (continued)

  • Print the names of every FASTA file.
cd ../../2-Variant-Call-Pipeline/regions/brazil/2020/fasta
for i in Brazil*; do echo $i; done
## Brazil_2020_07_01-2020_12_31_1.fasta
## Brazil_2020_07_01-2020_12_31_10.fasta
## Brazil_2020_07_01-2020_12_31_100.fasta
## Brazil_2020_07_01-2020_12_31_101.fasta
## Brazil_2020_07_01-2020_12_31_102.fasta
## Brazil_2020_07_01-2020_12_31_103.fasta
## Brazil_2020_07_01-2020_12_31_104.fasta
## Brazil_2020_07_01-2020_12_31_105.fasta
## Brazil_2020_07_01-2020_12_31_106.fasta
## Brazil_2020_07_01-2020_12_31_107.fasta
## Brazil_2020_07_01-2020_12_31_108.fasta
## Brazil_2020_07_01-2020_12_31_109.fasta
## Brazil_2020_07_01-2020_12_31_11.fasta
## Brazil_2020_07_01-2020_12_31_110.fasta
## Brazil_2020_07_01-2020_12_31_111.fasta
## Brazil_2020_07_01-2020_12_31_112.fasta
## Brazil_2020_07_01-2020_12_31_113.fasta
## Brazil_2020_07_01-2020_12_31_114.fasta
## Brazil_2020_07_01-2020_12_31_115.fasta
## Brazil_2020_07_01-2020_12_31_116.fasta
## Brazil_2020_07_01-2020_12_31_117.fasta
## Brazil_2020_07_01-2020_12_31_118.fasta
## Brazil_2020_07_01-2020_12_31_119.fasta
## Brazil_2020_07_01-2020_12_31_12.fasta
## Brazil_2020_07_01-2020_12_31_120.fasta
## Brazil_2020_07_01-2020_12_31_121.fasta
## Brazil_2020_07_01-2020_12_31_122.fasta
## Brazil_2020_07_01-2020_12_31_123.fasta
## Brazil_2020_07_01-2020_12_31_124.fasta
## Brazil_2020_07_01-2020_12_31_125.fasta
## Brazil_2020_07_01-2020_12_31_126.fasta
## Brazil_2020_07_01-2020_12_31_127.fasta
## Brazil_2020_07_01-2020_12_31_128.fasta
## Brazil_2020_07_01-2020_12_31_129.fasta
## Brazil_2020_07_01-2020_12_31_13.fasta
## Brazil_2020_07_01-2020_12_31_130.fasta
## Brazil_2020_07_01-2020_12_31_131.fasta
## Brazil_2020_07_01-2020_12_31_132.fasta
## Brazil_2020_07_01-2020_12_31_133.fasta
## Brazil_2020_07_01-2020_12_31_134.fasta
## Brazil_2020_07_01-2020_12_31_135.fasta
## Brazil_2020_07_01-2020_12_31_136.fasta
## Brazil_2020_07_01-2020_12_31_137.fasta
## Brazil_2020_07_01-2020_12_31_138.fasta
## Brazil_2020_07_01-2020_12_31_139.fasta
## Brazil_2020_07_01-2020_12_31_14.fasta
## Brazil_2020_07_01-2020_12_31_140.fasta
## Brazil_2020_07_01-2020_12_31_141.fasta
## Brazil_2020_07_01-2020_12_31_142.fasta
## Brazil_2020_07_01-2020_12_31_143.fasta
## Brazil_2020_07_01-2020_12_31_144.fasta
## Brazil_2020_07_01-2020_12_31_145.fasta
## Brazil_2020_07_01-2020_12_31_146.fasta
## Brazil_2020_07_01-2020_12_31_147.fasta
## Brazil_2020_07_01-2020_12_31_148.fasta
## Brazil_2020_07_01-2020_12_31_149.fasta
## Brazil_2020_07_01-2020_12_31_15.fasta
## Brazil_2020_07_01-2020_12_31_150.fasta
## Brazil_2020_07_01-2020_12_31_151.fasta
## Brazil_2020_07_01-2020_12_31_152.fasta
## Brazil_2020_07_01-2020_12_31_153.fasta
## Brazil_2020_07_01-2020_12_31_154.fasta
## Brazil_2020_07_01-2020_12_31_155.fasta
## Brazil_2020_07_01-2020_12_31_156.fasta
## Brazil_2020_07_01-2020_12_31_157.fasta
## Brazil_2020_07_01-2020_12_31_158.fasta
## Brazil_2020_07_01-2020_12_31_159.fasta
## Brazil_2020_07_01-2020_12_31_16.fasta
## Brazil_2020_07_01-2020_12_31_160.fasta
## Brazil_2020_07_01-2020_12_31_161.fasta
## Brazil_2020_07_01-2020_12_31_162.fasta
## Brazil_2020_07_01-2020_12_31_163.fasta
## Brazil_2020_07_01-2020_12_31_164.fasta
## Brazil_2020_07_01-2020_12_31_165.fasta
## Brazil_2020_07_01-2020_12_31_166.fasta
## Brazil_2020_07_01-2020_12_31_167.fasta
## Brazil_2020_07_01-2020_12_31_168.fasta
## Brazil_2020_07_01-2020_12_31_169.fasta
## Brazil_2020_07_01-2020_12_31_17.fasta
## Brazil_2020_07_01-2020_12_31_170.fasta
## Brazil_2020_07_01-2020_12_31_171.fasta
## Brazil_2020_07_01-2020_12_31_172.fasta
## Brazil_2020_07_01-2020_12_31_173.fasta
## Brazil_2020_07_01-2020_12_31_174.fasta
## Brazil_2020_07_01-2020_12_31_175.fasta
## Brazil_2020_07_01-2020_12_31_176.fasta
## Brazil_2020_07_01-2020_12_31_177.fasta
## Brazil_2020_07_01-2020_12_31_178.fasta
## Brazil_2020_07_01-2020_12_31_179.fasta
## Brazil_2020_07_01-2020_12_31_18.fasta
## Brazil_2020_07_01-2020_12_31_180.fasta
## Brazil_2020_07_01-2020_12_31_181.fasta
## Brazil_2020_07_01-2020_12_31_182.fasta
## Brazil_2020_07_01-2020_12_31_183.fasta
## Brazil_2020_07_01-2020_12_31_184.fasta
## Brazil_2020_07_01-2020_12_31_185.fasta
## Brazil_2020_07_01-2020_12_31_186.fasta
## Brazil_2020_07_01-2020_12_31_187.fasta
## Brazil_2020_07_01-2020_12_31_188.fasta
## Brazil_2020_07_01-2020_12_31_189.fasta
## Brazil_2020_07_01-2020_12_31_19.fasta
## Brazil_2020_07_01-2020_12_31_190.fasta
## Brazil_2020_07_01-2020_12_31_191.fasta
## Brazil_2020_07_01-2020_12_31_192.fasta
## Brazil_2020_07_01-2020_12_31_193.fasta
## Brazil_2020_07_01-2020_12_31_194.fasta
## Brazil_2020_07_01-2020_12_31_195.fasta
## Brazil_2020_07_01-2020_12_31_196.fasta
## Brazil_2020_07_01-2020_12_31_197.fasta
## Brazil_2020_07_01-2020_12_31_198.fasta
## Brazil_2020_07_01-2020_12_31_199.fasta
## Brazil_2020_07_01-2020_12_31_2.fasta
## Brazil_2020_07_01-2020_12_31_20.fasta
## Brazil_2020_07_01-2020_12_31_200.fasta
## Brazil_2020_07_01-2020_12_31_201.fasta
## Brazil_2020_07_01-2020_12_31_202.fasta
## Brazil_2020_07_01-2020_12_31_203.fasta
## Brazil_2020_07_01-2020_12_31_204.fasta
## Brazil_2020_07_01-2020_12_31_205.fasta
## Brazil_2020_07_01-2020_12_31_206.fasta
## Brazil_2020_07_01-2020_12_31_207.fasta
## Brazil_2020_07_01-2020_12_31_208.fasta
## Brazil_2020_07_01-2020_12_31_209.fasta
## Brazil_2020_07_01-2020_12_31_21.fasta
## Brazil_2020_07_01-2020_12_31_210.fasta
## Brazil_2020_07_01-2020_12_31_211.fasta
## Brazil_2020_07_01-2020_12_31_212.fasta
## Brazil_2020_07_01-2020_12_31_213.fasta
## Brazil_2020_07_01-2020_12_31_214.fasta
## Brazil_2020_07_01-2020_12_31_215.fasta
## Brazil_2020_07_01-2020_12_31_216.fasta
## Brazil_2020_07_01-2020_12_31_217.fasta
## Brazil_2020_07_01-2020_12_31_218.fasta
## Brazil_2020_07_01-2020_12_31_219.fasta
## Brazil_2020_07_01-2020_12_31_22.fasta
## Brazil_2020_07_01-2020_12_31_220.fasta
## Brazil_2020_07_01-2020_12_31_221.fasta
## Brazil_2020_07_01-2020_12_31_222.fasta
## Brazil_2020_07_01-2020_12_31_223.fasta
## Brazil_2020_07_01-2020_12_31_224.fasta
## Brazil_2020_07_01-2020_12_31_225.fasta
## Brazil_2020_07_01-2020_12_31_226.fasta
## Brazil_2020_07_01-2020_12_31_227.fasta
## Brazil_2020_07_01-2020_12_31_228.fasta
## Brazil_2020_07_01-2020_12_31_229.fasta
## Brazil_2020_07_01-2020_12_31_23.fasta
## Brazil_2020_07_01-2020_12_31_230.fasta
## Brazil_2020_07_01-2020_12_31_231.fasta
## Brazil_2020_07_01-2020_12_31_232.fasta
## Brazil_2020_07_01-2020_12_31_233.fasta
## Brazil_2020_07_01-2020_12_31_234.fasta
## Brazil_2020_07_01-2020_12_31_235.fasta
## Brazil_2020_07_01-2020_12_31_236.fasta
## Brazil_2020_07_01-2020_12_31_237.fasta
## Brazil_2020_07_01-2020_12_31_238.fasta
## Brazil_2020_07_01-2020_12_31_239.fasta
## Brazil_2020_07_01-2020_12_31_24.fasta
## Brazil_2020_07_01-2020_12_31_240.fasta
## Brazil_2020_07_01-2020_12_31_241.fasta
## Brazil_2020_07_01-2020_12_31_242.fasta
## Brazil_2020_07_01-2020_12_31_243.fasta
## Brazil_2020_07_01-2020_12_31_244.fasta
## Brazil_2020_07_01-2020_12_31_245.fasta
## Brazil_2020_07_01-2020_12_31_246.fasta
## Brazil_2020_07_01-2020_12_31_247.fasta
## Brazil_2020_07_01-2020_12_31_248.fasta
## Brazil_2020_07_01-2020_12_31_249.fasta
## Brazil_2020_07_01-2020_12_31_25.fasta
## Brazil_2020_07_01-2020_12_31_250.fasta
## Brazil_2020_07_01-2020_12_31_26.fasta
## Brazil_2020_07_01-2020_12_31_27.fasta
## Brazil_2020_07_01-2020_12_31_28.fasta
## Brazil_2020_07_01-2020_12_31_29.fasta
## Brazil_2020_07_01-2020_12_31_3.fasta
## Brazil_2020_07_01-2020_12_31_30.fasta
## Brazil_2020_07_01-2020_12_31_31.fasta
## Brazil_2020_07_01-2020_12_31_32.fasta
## Brazil_2020_07_01-2020_12_31_33.fasta
## Brazil_2020_07_01-2020_12_31_34.fasta
## Brazil_2020_07_01-2020_12_31_35.fasta
## Brazil_2020_07_01-2020_12_31_36.fasta
## Brazil_2020_07_01-2020_12_31_37.fasta
## Brazil_2020_07_01-2020_12_31_38.fasta
## Brazil_2020_07_01-2020_12_31_39.fasta
## Brazil_2020_07_01-2020_12_31_4.fasta
## Brazil_2020_07_01-2020_12_31_40.fasta
## Brazil_2020_07_01-2020_12_31_41.fasta
## Brazil_2020_07_01-2020_12_31_42.fasta
## Brazil_2020_07_01-2020_12_31_43.fasta
## Brazil_2020_07_01-2020_12_31_44.fasta
## Brazil_2020_07_01-2020_12_31_45.fasta
## Brazil_2020_07_01-2020_12_31_46.fasta
## Brazil_2020_07_01-2020_12_31_47.fasta
## Brazil_2020_07_01-2020_12_31_48.fasta
## Brazil_2020_07_01-2020_12_31_49.fasta
## Brazil_2020_07_01-2020_12_31_5.fasta
## Brazil_2020_07_01-2020_12_31_50.fasta
## Brazil_2020_07_01-2020_12_31_51.fasta
## Brazil_2020_07_01-2020_12_31_52.fasta
## Brazil_2020_07_01-2020_12_31_53.fasta
## Brazil_2020_07_01-2020_12_31_54.fasta
## Brazil_2020_07_01-2020_12_31_55.fasta
## Brazil_2020_07_01-2020_12_31_56.fasta
## Brazil_2020_07_01-2020_12_31_57.fasta
## Brazil_2020_07_01-2020_12_31_58.fasta
## Brazil_2020_07_01-2020_12_31_59.fasta
## Brazil_2020_07_01-2020_12_31_6.fasta
## Brazil_2020_07_01-2020_12_31_60.fasta
## Brazil_2020_07_01-2020_12_31_61.fasta
## Brazil_2020_07_01-2020_12_31_62.fasta
## Brazil_2020_07_01-2020_12_31_63.fasta
## Brazil_2020_07_01-2020_12_31_64.fasta
## Brazil_2020_07_01-2020_12_31_65.fasta
## Brazil_2020_07_01-2020_12_31_66.fasta
## Brazil_2020_07_01-2020_12_31_67.fasta
## Brazil_2020_07_01-2020_12_31_68.fasta
## Brazil_2020_07_01-2020_12_31_69.fasta
## Brazil_2020_07_01-2020_12_31_7.fasta
## Brazil_2020_07_01-2020_12_31_70.fasta
## Brazil_2020_07_01-2020_12_31_71.fasta
## Brazil_2020_07_01-2020_12_31_72.fasta
## Brazil_2020_07_01-2020_12_31_73.fasta
## Brazil_2020_07_01-2020_12_31_74.fasta
## Brazil_2020_07_01-2020_12_31_75.fasta
## Brazil_2020_07_01-2020_12_31_76.fasta
## Brazil_2020_07_01-2020_12_31_77.fasta
## Brazil_2020_07_01-2020_12_31_78.fasta
## Brazil_2020_07_01-2020_12_31_79.fasta
## Brazil_2020_07_01-2020_12_31_8.fasta
## Brazil_2020_07_01-2020_12_31_80.fasta
## Brazil_2020_07_01-2020_12_31_81.fasta
## Brazil_2020_07_01-2020_12_31_82.fasta
## Brazil_2020_07_01-2020_12_31_83.fasta
## Brazil_2020_07_01-2020_12_31_84.fasta
## Brazil_2020_07_01-2020_12_31_85.fasta
## Brazil_2020_07_01-2020_12_31_86.fasta
## Brazil_2020_07_01-2020_12_31_87.fasta
## Brazil_2020_07_01-2020_12_31_88.fasta
## Brazil_2020_07_01-2020_12_31_89.fasta
## Brazil_2020_07_01-2020_12_31_9.fasta
## Brazil_2020_07_01-2020_12_31_90.fasta
## Brazil_2020_07_01-2020_12_31_91.fasta
## Brazil_2020_07_01-2020_12_31_92.fasta
## Brazil_2020_07_01-2020_12_31_93.fasta
## Brazil_2020_07_01-2020_12_31_94.fasta
## Brazil_2020_07_01-2020_12_31_95.fasta
## Brazil_2020_07_01-2020_12_31_96.fasta
## Brazil_2020_07_01-2020_12_31_97.fasta
## Brazil_2020_07_01-2020_12_31_98.fasta
## Brazil_2020_07_01-2020_12_31_99.fasta

5. Loops (continued)

  • Let’s pipe this output into the wc command and let’s have it count how many files, for us.
cd ../../2-Variant-Call-Pipeline/regions/brazil/2020/fasta
for i in Brazil*; do echo $i; done | wc
##      250     250    9642
  • Now count only the number of lines
cd ../../2-Variant-Call-Pipeline/regions/brazil/2020/fasta
for i in Brazil*; do echo $i; done | wc -l
##      250

6. Shell Scripts

  • Variant call shell script: an alignment in a for loop

Region=brazil

for fasta_file in $(cat brazil_fasta_julDec/COVID_List_Region.txt); do 

  ## Print names of Project Directory and FASTA file
  echo $ProjectDirectory
  echo $fast_file
  
  
  ## Alignment
  ~/anaconda3/bin/bwa mem -M -R \
  '@RG\tID:SampleCorona\tLB:sample_1\tPL:ILLUMINA\tPM:HISEQ\tSM:SampleCorona' \
  fasta_reference_file/SARS-CoV-2.fasta \
  brazil_fasta_julDec/$fasta_file > \
  brazil_alignment_julDec_sam/$fasta_file".sam"
  
  
  ## SAM to BAM
  samtools view -S -b $Region"_alignment_julDec_sam"/$fasta_file".sam" > \
  $Region"_alignment_julDec_bam"/$fasta_file".bam"
  
  
  ## Samtools uses reference FASTA to detect "piles" in the alignment
  samtools mpileup -g -f fasta_reference_file/SARS-CoV-2.fasta $Region"_alignment_julDec_bam"/$fasta_file".bam" > \
  $Region"_julDec_bcf"/$fasta_file".bcf"
  
  ## Bcftools extracts SNPs
  ~/Desktop/Gepoliano/bcftools/bcftools view -v snps $Region"_julDec_bcf"/$fasta_file".bcf" > $Region"_vcf_julDec_snp"/$fasta_file"_snps.vcf"

  ## Bcftools extracts indels
  ~/Desktop/Gepoliano/bcftools/bcftools view -v indels $Region"_julDec_bcf"/$fasta_file".bcf" > $Region"_vcf_julDec_indel"/$fasta_file"_indels.vcf"

done

7. Finding Things

  • The find command
pwd
find . -name "*Rmd" -print
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts
## ./Introduction to the Terminal.Rmd
## ./Introduction-to-the-Terminal.Rmd
## ./Introduction to R and Terminal.Rmd
  • find names of figures of format png
pwd
find ../figures -name "*png" -print
## /Users/gepolianochaves/Desktop/Gepoliano/SIP2023_BME03/recombio/1-Introduction/scripts
## ../figures/general syntax.png
## ../figures/absolute vs relative paths.png

7. Finding Things (continued)

  • The grep command
grep "print" Introduction\ to\ the\ Terminal.Rmd 
##   #   df_print: paged
## print working directory
## find . -name "*Rmd" -print
## find ../figures -name "*png" -print
## grep "print" Introduction\ to\ the\ Terminal.Rmd

7. Finding Things (continued)

  • The cat and head commands
cat Introduction\ to\ the\ Terminal.Rmd | head 
## ---
## title: "Introduction to the Command Line (Terminal)"
## author: "Gepoliano Chaves, Ph. D."
## date: "September 9th, 2023"
## output:
##   # pdf_document: default
##   # output: slidy_presentation
##   revealjs::revealjs_presentation
##   # html_document:
##   #   df_print: paged

8) References

9) Session Info

sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur 10.16
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] revealjs_0.9    digest_0.6.32   R6_2.5.1        jsonlite_1.8.7 
##  [5] evaluate_0.21   cachem_1.0.8    rlang_1.1.1     cli_3.6.1      
##  [9] rstudioapi_0.14 jquerylib_0.1.4 bslib_0.5.0     rmarkdown_2.22 
## [13] tools_4.1.1     xfun_0.39       yaml_2.3.7      fastmap_1.1.1  
## [17] compiler_4.1.1  htmltools_0.5.5 knitr_1.43      sass_0.4.6