/
profileProcess.R
140 lines (125 loc) · 4.46 KB
/
profileProcess.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#' profileProcess
#' @description process metabolomic profiling data
#' @param file_paths character vector of file paths to use for processing
#' @param sample_info tibble containing sample info
#' @param parameters object of class ProfileParameters containing the parameters for processing
#' @return An S4 object of class MetaboProfile
#' @seealso \code{\link{profileParameters}}
#' @examples
#' \dontrun{
#' # LCMS-RP example using the faahKO package data
#' ## Retrieve file paths
#' file_paths <- list.files(
#' system.file("cdf",
#' package = "faahKO"),
#' full.names = TRUE,
#' recursive = TRUE)[1:2]
#' file_names <- basename(file_paths)
#' sample_names <- tools::file_path_sans_ext(file_names)
#'
#' ## Generate sample information table
#' sample_info <- tibble(fileOrder = seq_along(file_paths),
#' injOrder = seq_along(file_paths),
#' fileName = file_names,
#' batch = 1,
#' block = 1,
#' name = sample_names,
#' class = substr(sample_names,1,2))
#'
#' ## Generate profiling parameters
#' parameters <- profileParameters('LCMS-RP')
#' processingParameters(parameters)$peakDetection <- CentWaveParam(snthresh = 20,
#' noise = 1000)
#' processingParameters(parameters)$retentionTimeCorrection <- ObiwarpParam()
#' processingParameters(parameters)$grouping <- PeakDensityParam(sampleGroups = sample_info$class,
#' maxFeatures = 300,
#' minFraction = 2/3)
#' ## Specify parallel processing plan
#' plan('sequential')
#'
#' ## Process data
#' processed_data <- profileProcess(file_paths,sample_info,parameters)
#'
#' # GCMS-XCMS example using the gcspikelite package data
#' ## Retrieve file paths
#' file_paths <- list.files(
#' system.file('data',
#' package = 'gcspikelite'),
#' pattern = '.CDF',
#' full.names = TRUE)[1:2]
#' file_names <- basename(file_paths)
#' sample_names <- tools::file_path_sans_ext(file_names)
#'
#' ## Generate sample information table
#' sample_info <- tibble(fileOrder = seq_along(file_paths),
#' injOrder = seq_along(file_paths),
#' fileName = file_names,
#' batch = 1,
#' block = 1,
#' name = sample_names,
#' class = targets$Group[1:2])
#'
#' ## Generate profiling parameters
#' parameters <- profileParameters('GCMS-XCMS')
#'
#' ## Specify parallel processing plan
#' plan('sequential')
#'
#' ## Process data
#' processed_data <- profileProcess(file_paths,sample_info,parameters)
#'
#' # GCMS-eRah example using the gcspikelite package data
#' ## Retrieve file paths
#' file_paths <- list.files(
#' system.file('data',
#' package = 'gcspikelite'),
#' pattern = '.CDF',
#' full.names = TRUE)[1:2]
#' file_names <- basename(file_paths)
#' sample_names <- tools::file_path_sans_ext(file_names)
#'
#' ## Generate sample information table
#' sample_info <- tibble(fileOrder = seq_along(file_paths),
#' injOrder = seq_along(file_paths),
#' fileName = file_names,
#' batch = 1,
#' block = 1,
#' name = sample_names,
#' class = targets$Group[1:2])
#'
#' ## Generate profiling parameters
#' parameters <- profileParameters('GCMS-eRah')
#'
#' ## Specify parallel processing plan
#' plan('sequential')
#'
#' ## Process data
#' processed_data <- profileProcess(file_paths,sample_info,parameters)
#' }
#' @importFrom tibble tibble
#' @importFrom methods new
#' @importFrom dplyr arrange
#' @export
profileProcess <- function(file_paths,sample_info,parameters) {
file_paths <- file_paths[order(sample_info$injOrder)]
sample_info <- sample_info %>%
arrange(injOrder)
x <- new('MetaboProfile',parameters,
file_paths = file_paths,
sample_info = sample_info)
method <- parameters %>%
technique() %>%
profilingMethods()
x <- method(x)
return(x)
}
profilingMethods <- function(method = NULL){
methods <- list(
`GCMS-eRah` = erahProcessing,
`GCMS-XCMS` = GCMSprocessing,
`LCMS-RP` = XCMSprocessing,
`LCMS-NP` = XCMSprocessing
)
method <- methods[[method]]
return(method)
}