Received some mass spec data in Excel format
library("readxl")
library("vioplot")
## Loading required package: sm
## Package 'sm', version 2.2-5.7: type help(sm) for summary information
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library("gplots")
##
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
##
## lowess
pos <- read_xlsx("Pos-Neg Sept11.xlsx",sheet = 1,col_names = FALSE)
## New names:
## * `` -> ...1
## * `` -> ...2
## * `` -> ...3
## * `` -> ...4
## * `` -> ...5
## * ...
neg <- read_xlsx("Pos-Neg Sept11.xlsx",sheet = 2,col_names = FALSE)
## New names:
## * `` -> ...1
## * `` -> ...2
## * `` -> ...3
## * `` -> ...4
## * `` -> ...5
## * ...
dim(pos)
## [1] 43 9972
dim(neg)
## [1] 27 4901
pos[1:8,1:6]
## # A tibble: 8 × 6
## ...1 ...2 ...3 ...4 ...5 ...6
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 Primary ID Run Condit… Group 0.02_296.1… 0.02_307.…
## 2 Neutral mass (Da) <NA> <NA> <NA> <NA> <NA>
## 3 m/z <NA> <NA> <NA> 296.105200… 307.11950…
## 4 Retention time (min) <NA> <NA> <NA> 0.02 0.02
## 5 Accepted Description <NA> <NA> <NA> <NA> <NA>
## 6 Accepted ID <NA> <NA> <NA> <NA> <NA>
## 7 1 20_Sep11 Seasol Mar… 40787 <NA> 0 0
## 8 2 20_Sep11 Seasol Mar… 40787 <NA> 0 0
posdat <- t(pos[7:nrow(pos),5:ncol(pos)])
posdat <- apply(X = posdat, MARGIN = 2, FUN = as.numeric)
head(posdat)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000 0
## [2,] 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000 0
## [3,] 0.00000 92.69543 227.7682 0 0 206.7983 72.70763 101.42360 0
## [4,] 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000 0
## [5,] 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000 0
## [6,] 58.37006 276.52670 148.7355 0 0 185.9440 91.38412 35.40295 0
## [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21]
## [1,] 0 0 0 0 0 0 0 0 0 0 0.00000 0
## [2,] 0 0 0 0 0 0 0 0 0 0 0.00000 0
## [3,] 0 0 0 0 0 0 0 0 0 0 12.38528 0
## [4,] 0 0 0 0 0 0 0 0 0 0 0.00000 0
## [5,] 0 0 0 0 0 0 0 0 0 0 0.00000 0
## [6,] 0 0 0 0 0 0 0 0 0 0 0.00000 0
## [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32]
## [1,] 0 0.00000 0 0 0 0 0 0.00000 0 0 0.00000
## [2,] 0 0.00000 0 0 0 0 0 0.00000 0 0 0.00000
## [3,] 0 14.05922 0 0 0 0 0 16.32809 0 0 17.55408
## [4,] 0 0.00000 0 0 0 0 0 0.00000 0 0 0.00000
## [5,] 0 0.00000 0 0 0 0 0 0.00000 0 0 0.00000
## [6,] 0 0.00000 0 0 0 0 0 0.00000 0 0 0.00000
## [,33] [,34] [,35] [,36] [,37]
## [1,] 0 0 0 0 0
## [2,] 0 0 0 0 0
## [3,] 0 0 0 0 0
## [4,] 0 0 0 0 0
## [5,] 0 0 0 0 0
## [6,] 0 0 0 0 0
dim(posdat)
## [1] 9968 37
pos_row_info <- pos[7:nrow(pos),1:4]
colnames(pos_row_info) <- c("num","run","ID","group")
pos_row_info
## # A tibble: 37 × 4
## num run ID group
## <chr> <chr> <chr> <chr>
## 1 1 20_Sep11 Seasol Marker Screen Pos_01 40787 <NA>
## 2 2 20_Sep11 Seasol Marker Screen Pos_02 40787 <NA>
## 3 3 20_Sep11 Seasol Marker Screen Pos_03 40787 <NA>
## 4 4 20_Sep11 Seasol Marker Screen Pos_03A 40787 Group 2
## 5 5 20_Sep11 Seasol Marker Screen Pos_03B 40787 Group 2
## 6 6 20_Sep11 Seasol Marker Screen Pos_04 40787 <NA>
## 7 7 20_Sep11 Seasol Marker Screen Pos_05 40787 <NA>
## 8 8 20_Sep11 Seasol Marker Screen Pos_06 40787 <NA>
## 9 9 20_Sep11 Seasol Marker Screen Pos_07 40787 Group 1
## 10 10 20_Sep11 Seasol Marker Screen Pos_08 40787 Group 1
## # … with 27 more rows
dim(pos_row_info)
## [1] 37 4
colnames(posdat) <- sapply(strsplit(pos_row_info$run," "),"[[",5)
rownames(posdat) <-1:nrow(posdat)
head(posdat)
## Pos_01 Pos_02 Pos_03 Pos_03A Pos_03B Pos_04 Pos_05 Pos_06
## 1 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000
## 2 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000
## 3 0.00000 92.69543 227.7682 0 0 206.7983 72.70763 101.42360
## 4 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000
## 5 0.00000 0.00000 0.0000 0 0 0.0000 0.00000 0.00000
## 6 58.37006 276.52670 148.7355 0 0 185.9440 91.38412 35.40295
## Pos_07 Pos_08 Pos_09 Pos_10 Pos_11 Pos_12 Pos_13 Pos_14 Pos_15 Pos_16 Pos_17
## 1 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 0
## Pos_18 Pos_19 Pos_20 Pos_21 Pos_22 Pos_23 Pos_24 Pos_25 Pos_26 Pos_27
## 1 0.00000 0 0 0.00000 0 0 0 0 0 0.00000
## 2 0.00000 0 0 0.00000 0 0 0 0 0 0.00000
## 3 12.38528 0 0 14.05922 0 0 0 0 0 16.32809
## 4 0.00000 0 0 0.00000 0 0 0 0 0 0.00000
## 5 0.00000 0 0 0.00000 0 0 0 0 0 0.00000
## 6 0.00000 0 0 0.00000 0 0 0 0 0 0.00000
## Pos_28 Pos_29 Pos_30 Pos_31 Pos_32 Pos_33 Pos_34 Pos_35
## 1 0 0 0.00000 0 0 0 0 0
## 2 0 0 0.00000 0 0 0 0 0
## 3 0 0 17.55408 0 0 0 0 0
## 4 0 0 0.00000 0 0 0 0 0
## 5 0 0 0.00000 0 0 0 0 0
## 6 0 0 0.00000 0 0 0 0 0
hist(colMeans(posdat))
vioplot(colMeans(posdat))
rm <- rowMeans(posdat)
maxrow <- names(head(rm[order(-rm)],1))
maxrow
## [1] "6632"
posnorm <- posdat/posdat[maxrow,]*1000000
head(posnorm)
## Pos_01 Pos_02 Pos_03 Pos_03A Pos_03B Pos_04 Pos_05 Pos_06
## 1 0.000000 0.000000 0.000000 0 0 0.000000 0.000000 0.000000
## 2 0.000000 0.000000 0.000000 0 0 0.000000 0.000000 0.000000
## 3 0.000000 5.378085 14.224950 0 0 8.855912 4.073556 8.754047
## 4 0.000000 0.000000 0.000000 0 0 0.000000 0.000000 0.000000
## 5 0.000000 0.000000 0.000000 0 0 0.000000 0.000000 0.000000
## 6 6.319444 18.546815 5.136297 0 0 18.944965 5.503519 1.198328
## Pos_07 Pos_08 Pos_09 Pos_10 Pos_11 Pos_12 Pos_13 Pos_14 Pos_15 Pos_16 Pos_17
## 1 0 0 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0 0 0 0
## Pos_18 Pos_19 Pos_20 Pos_21 Pos_22 Pos_23 Pos_24 Pos_25 Pos_26
## 1 0.0000000 0 0 0.0000000 0 0 0 0 0
## 2 0.0000000 0 0 0.0000000 0 0 0 0 0
## 3 0.9070674 0 0 0.4758799 0 0 0 0 0
## 4 0.0000000 0 0 0.0000000 0 0 0 0 0
## 5 0.0000000 0 0 0.0000000 0 0 0 0 0
## 6 0.0000000 0 0 0.0000000 0 0 0 0 0
## Pos_27 Pos_28 Pos_29 Pos_30 Pos_31 Pos_32 Pos_33 Pos_34 Pos_35
## 1 0.0000000 0 0 0.0000000 0 0 0 0 0
## 2 0.0000000 0 0 0.0000000 0 0 0 0 0
## 3 0.9302748 0 0 0.9268194 0 0 0 0 0
## 4 0.0000000 0 0 0.0000000 0 0 0 0 0
## 5 0.0000000 0 0 0.0000000 0 0 0 0 0
## 6 0.0000000 0 0 0.0000000 0 0 0 0 0
hist(colMeans(posnorm))
vioplot(colMeans(posnorm))
negdat <- t(neg[9:nrow(neg),5:ncol(neg)])
negdat <- apply(X = negdat, MARGIN = 2, FUN = as.numeric)
head(negdat)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 101576.300 102119.200 101869.300 94116.890 69494.150 105796.400 107748.500
## [2,] 27809.580 27498.720 26338.100 23716.240 18866.910 23631.170 23369.630
## [3,] 9094.959 8814.040 8344.900 7559.509 3723.196 7498.027 7432.521
## [4,] 9356.177 9249.636 8665.360 8038.216 4112.477 7754.904 7749.492
## [5,] 3857.848 3750.044 3888.497 3085.333 2093.860 3216.274 3607.846
## [6,] 3896.218 3860.125 2783.736 2287.913 1882.221 2165.419 2974.093
## [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,] 106596.700 109277.700 102275.100 92658.860 87503.850 76895.540 78296.790
## [2,] 22702.680 23639.410 22498.800 21625.010 19329.310 18746.780 19416.270
## [3,] 6710.270 6615.157 6115.362 5917.347 5531.769 4868.444 5346.185
## [4,] 6984.642 7383.241 6613.654 6193.886 5793.609 5577.081 5600.455
## [5,] 3192.746 3307.532 3052.538 3249.977 2725.832 2520.426 2805.349
## [6,] 3218.471 3102.704 3248.260 2777.375 3198.914 2430.608 2828.839
## [,15] [,16] [,17] [,18] [,19]
## [1,] 108952.800 80861.570 98471.870 93960.720 75238.170
## [2,] 27125.330 21326.440 24282.830 22749.710 19387.210
## [3,] 6975.217 4277.369 6827.775 6707.019 5020.700
## [4,] 7841.949 5221.655 7620.813 6829.957 5604.821
## [5,] 3425.293 2977.733 3752.636 2662.966 2542.287
## [6,] 3611.767 2615.358 2931.984 4240.105 2568.251
dim(negdat)
## [1] 4897 19
neg_row_info <- neg[9:nrow(neg),1:4]
colnames(neg_row_info) <- c("num","run","ID","group")
neg_row_info
## # A tibble: 19 × 4
## num run ID group
## <chr> <chr> <chr> <chr>
## 1 1 20_Sep11 Seasol Marker Screen Neg_05 Seasol Group 1
## 2 2 20_Sep11 Seasol Marker Screen Neg_06 Seasol Group 1
## 3 3 20_Sep11 Seasol Marker Screen Neg_07 Seasol Group 1
## 4 4 20_Sep11 Seasol Marker Screen Neg_09 Seasol Group 1
## 5 5 20_Sep11 Seasol Marker Screen Neg_11 Seasol Group 1
## 6 6 20_Sep11 Seasol Marker Screen Neg_12 Seasol Group 1
## 7 7 20_Sep11 Seasol Marker Screen Neg_13 Seasol Group 1
## 8 8 20_Sep11 Seasol Marker Screen Neg_16 Seasol Group 1
## 9 9 20_Sep11 Seasol Marker Screen Neg_19 Seasol Group 1
## 10 10 20_Sep11 Seasol Marker Screen Neg_22 Seasol Group 1
## 11 11 20_Sep11 Seasol Marker Screen Neg_23 Seasol Group 1
## 12 12 20_Sep11 Seasol Marker Screen Neg_25 Seasol N2 Group 1
## 13 13 20_Sep11 Seasol Marker Screen Neg_26 Seasol EX Group 1
## 14 14 20_Sep11 Seasol Marker Screen Neg_27 Seasol EX Group 1
## 15 15 20_Sep11 Seasol Marker Screen Neg_28 Competitors Competitors
## 16 16 20_Sep11 Seasol Marker Screen Neg_29 Competitors Competitors
## 17 17 20_Sep11 Seasol Marker Screen Neg_30 Competitors Competitors
## 18 18 20_Sep11 Seasol Marker Screen Neg_31 Competitors Competitors
## 19 19 20_Sep11 Seasol Marker Screen Neg_33 Competitors Competitors
dim(neg_row_info)
## [1] 19 4
strsplit(neg_row_info$run," ")
## [[1]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_05"
##
## [[2]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_06"
##
## [[3]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_07"
##
## [[4]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_09"
##
## [[5]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_11"
##
## [[6]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_12"
##
## [[7]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_13"
##
## [[8]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_16"
##
## [[9]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_19"
##
## [[10]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_22"
##
## [[11]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_23"
##
## [[12]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_25"
##
## [[13]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_26"
##
## [[14]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_27"
##
## [[15]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_28"
##
## [[16]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_29"
##
## [[17]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_30"
##
## [[18]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_31"
##
## [[19]]
## [1] "20_Sep11" "Seasol" "Marker" "Screen" "Neg_33"
colnames(negdat) <- sapply(strsplit(neg_row_info$run," "),"[[",5)
rownames(negdat) <-1:nrow(negdat)
head(negdat)
## Neg_05 Neg_06 Neg_07 Neg_09 Neg_11 Neg_12 Neg_13
## 1 101576.300 102119.200 101869.300 94116.890 69494.150 105796.400 107748.500
## 2 27809.580 27498.720 26338.100 23716.240 18866.910 23631.170 23369.630
## 3 9094.959 8814.040 8344.900 7559.509 3723.196 7498.027 7432.521
## 4 9356.177 9249.636 8665.360 8038.216 4112.477 7754.904 7749.492
## 5 3857.848 3750.044 3888.497 3085.333 2093.860 3216.274 3607.846
## 6 3896.218 3860.125 2783.736 2287.913 1882.221 2165.419 2974.093
## Neg_16 Neg_19 Neg_22 Neg_23 Neg_25 Neg_26 Neg_27
## 1 106596.700 109277.700 102275.100 92658.860 87503.850 76895.540 78296.790
## 2 22702.680 23639.410 22498.800 21625.010 19329.310 18746.780 19416.270
## 3 6710.270 6615.157 6115.362 5917.347 5531.769 4868.444 5346.185
## 4 6984.642 7383.241 6613.654 6193.886 5793.609 5577.081 5600.455
## 5 3192.746 3307.532 3052.538 3249.977 2725.832 2520.426 2805.349
## 6 3218.471 3102.704 3248.260 2777.375 3198.914 2430.608 2828.839
## Neg_28 Neg_29 Neg_30 Neg_31 Neg_33
## 1 108952.800 80861.570 98471.870 93960.720 75238.170
## 2 27125.330 21326.440 24282.830 22749.710 19387.210
## 3 6975.217 4277.369 6827.775 6707.019 5020.700
## 4 7841.949 5221.655 7620.813 6829.957 5604.821
## 5 3425.293 2977.733 3752.636 2662.966 2542.287
## 6 3611.767 2615.358 2931.984 4240.105 2568.251
hist(colMeans(negdat))
vioplot(colMeans(negdat))
rm <- rowMeans(negdat)
maxrow <- names(head(rm[order(-rm)],1))
maxrow
## [1] "4107"
negnorm <- negdat/negdat[maxrow,]*1000000
head(negnorm)
## Neg_05 Neg_06 Neg_07 Neg_09 Neg_11 Neg_12 Neg_13
## 1 33696.462 22370.327 32732.2894 30070.6774 19994.4212 36868.3938 34447.619
## 2 9338.498 5526.954 8561.1264 8147.4300 6258.8233 5176.6661 7509.048
## 3 3091.296 1961.826 2824.5495 2663.5790 1250.2547 1507.0248 2415.920
## 4 3318.996 2150.669 2989.4695 2720.6955 1397.7947 1726.0841 2623.018
## 5 1232.596 1078.939 1355.0805 986.3931 742.7727 747.8283 1244.674
## 6 1338.499 1280.540 609.8078 735.1443 601.3762 623.0208 1036.425
## Neg_16 Neg_19 Neg_22 Neg_23 Neg_25 Neg_26 Neg_27
## 1 37813.952 25408.579 35283.9688 31362.2506 29741.7881 17115.3851 26501.5952
## 2 7253.586 6801.383 7840.4806 6913.6007 6856.8502 4358.8861 6698.4346
## 3 2305.233 2194.482 1339.6369 1901.3414 1767.4197 1400.7182 1863.0620
## 4 2461.026 2479.303 1329.2751 2013.3055 1990.3249 1850.1156 1226.8409
## 5 1080.649 1124.201 679.4329 1100.0397 960.4419 846.3628 563.8457
## 6 1028.958 1100.649 755.2655 958.1688 1082.7366 826.1423 629.6421
## Neg_28 Neg_29 Neg_30 Neg_31 Neg_33
## 1 38389.318 27153.4344 19791.8131 30541.6717 25847.1716
## 2 9181.112 7248.6692 5404.8647 7700.2340 6831.0477
## 3 2230.004 1517.3474 1587.5523 2313.8599 1699.3567
## 4 2519.748 1668.3371 2192.6125 2380.1334 1791.8833
## 5 1113.382 1022.9645 1244.8825 583.3518 816.8788
## 6 1222.497 921.5166 984.5645 852.2166 834.8029
hist(colMeans(negnorm))
vioplot(colMeans(negnorm))
First with the Pos dataset.
mds <- cmdscale(dist(t(posnorm)))
str(mds)
## num [1:37, 1:2] -581044 -27881 -389026 -594704 -915495 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:37] "Pos_01" "Pos_02" "Pos_03" "Pos_03A" ...
## ..$ : NULL
plot(mds*1.1, xlab="Coordinate 1", ylab="Coordinate 2", type = "n", bty="n",main="Pos")
text(mds, labels=rownames(mds))
heatmap.2(cor(posnorm,method = "pearson"),scale="none",trace="none",
cexRow = 0.7,cexCol = 0.7 , main="Pos data Pearson correlaton")
heatmap.2(cor(posnorm,method= "spearman"),scale="none",trace="none",
cexRow = 0.7,cexCol = 0.7 , main="Pos data Spearman correlaton")
Now with the Neg dataset. Samples Neg05 to Neg23 are Seasol. Neg25 is Seasol N2. Neg26 and Neg27 are Seasol EX. Neg28 to Neg33 are competitors.
mds <- cmdscale(dist(t(negnorm)))
str(mds)
## num [1:19, 1:2] -291911 -419693 -233020 -270324 -207792 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:19] "Neg_05" "Neg_06" "Neg_07" "Neg_09" ...
## ..$ : NULL
plot(mds*1.1, xlab="Coordinate 1", ylab="Coordinate 2", type = "n", bty="n",main="Neg")
text(mds, labels=rownames(mds))
heatmap.2(cor(negnorm,method = "pearson"),scale="none",trace="none",
cexRow = 0.7,cexCol = 0.7 , main="Neg data Pearson correlaton")
heatmap.2(cor(negnorm,method= "spearman"),scale="none",trace="none",
cexRow = 0.7,cexCol = 0.7 , main="Neg data Spearman correlaton")
For reproducibility.
sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.3 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
##
## locale:
## [1] LC_CTYPE=en_AU.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_AU.UTF-8 LC_COLLATE=en_AU.UTF-8
## [5] LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8
## [7] LC_PAPER=en_AU.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] gplots_3.1.1 vioplot_0.3.7 zoo_1.8-9 sm_2.2-5.7 readxl_1.3.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.7 highr_0.9 cellranger_1.1.0 bslib_0.3.0
## [5] compiler_4.1.1 pillar_1.6.2 jquerylib_0.1.4 bitops_1.0-7
## [9] tools_4.1.1 digest_0.6.27 jsonlite_1.7.2 evaluate_0.14
## [13] tibble_3.1.4 lifecycle_1.0.0 lattice_0.20-45 pkgconfig_2.0.3
## [17] rlang_0.4.11 rstudioapi_0.13 cli_3.0.1 yaml_2.2.1
## [21] xfun_0.26 fastmap_1.1.0 stringr_1.4.0 knitr_1.34
## [25] sass_0.4.0 vctrs_0.3.8 gtools_3.9.2 caTools_1.18.2
## [29] grid_4.1.1 R6_2.5.1 fansi_0.5.0 rmarkdown_2.11
## [33] magrittr_2.0.1 htmltools_0.5.2 ellipsis_0.3.2 KernSmooth_2.23-20
## [37] utf8_1.2.2 stringi_1.7.4 crayon_1.4.1