Skip to content

Commit 18c9de8

Browse files
committed
0.8.4: documentation and other fixes
1 parent feadeaf commit 18c9de8

28 files changed

+335
-180
lines changed

DESCRIPTION

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ Imports:
1717
Matrix (>= 1.2.12),
1818
methods,
1919
parallel,
20-
RcppEigen (>= 0.3.3.4.0)
20+
RcppEigen (>= 0.3.3.4.0),
21+
stats (>= 3.4.3)
2122
Suggests:
2223
magick (>= 2.0),
2324
mi (>= 1.0),

NAMESPACE

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Generated by roxygen2: do not edit by hand
22

3+
S3method(formula,vw_fastlm)
34
S3method(hist,vw)
45
S3method(nobs,vw_fastlm)
56
S3method(print,vw)
@@ -14,7 +15,6 @@ export(fbm_row_is_0)
1415
export(fbm_row_mean)
1516
export(fbm_row_sd)
1617
export(fbm_row_sum)
17-
export(formula.vw_fastlm)
1818
export(freeview)
1919
export(imp2list)
2020
export(load.annot)
@@ -38,3 +38,4 @@ importFrom(bigstatsr,cols_along)
3838
importFrom(bigstatsr,rows_along)
3939
importFrom(foreach,"%dopar%")
4040
importFrom(foreach,foreach)
41+
importFrom(stats,nobs)

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
## Minor Tweaks
88
* Added the `file_out_tree` argument, which controls whether output files also contain the full project name. By default, it is the inverse of `dir_out_tree`.
9+
* Fixed a lot of the documentation.
910

1011
# QDECR 0.8.3
1112

R/FBM_functions.R

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
1+
#' @name fbm_functions_from_qdecr
2+
#' @rdname fbm_functions_from_qdecr
3+
#'
4+
#' @title fbm functions from qdecr
5+
#'
6+
#' @param X the FBM (file-backed matrix) object
7+
#' @param ncores the number of cores to be used
8+
#' @param row.ind the rows to go over (by default, it goes over all rows)
9+
#' @param col.ind the columns to go over (by default, it goes over all columns)
10+
#' @param row.mask a separate mask for the rows (added because this was useful internally)
11+
#' @param col.mask a separate mask for the columns (added because this was useful internally)
112
#' @importFrom bigstatsr rows_along
213
#' @importFrom bigstatsr cols_along
14+
#' @return an mgh object of the corresponding map
15+
NULL
316

17+
#' @rdname fbm_functions_from_qdecr
418
#' @export
519
fbm_row_mean <- function(X, ncores = 1,
620
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -12,6 +26,7 @@ fbm_row_mean <- function(X, ncores = 1,
1226
bigstatsr::big_apply(X, a.FUN = function(X, ind) rowMeans(X[row.ind[ind], col.ind]), a.combine = "c", ncores = ncores, ind = seq_along(row.ind))
1327
}
1428

29+
#' @rdname fbm_functions_from_qdecr
1530
#' @export
1631
fbm_col_mean <- function(X, ncores = 1,
1732
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -23,6 +38,7 @@ fbm_col_mean <- function(X, ncores = 1,
2338
bigstatsr::big_apply(X, a.FUN = function(X, ind) colMeans(X[row.ind, col.ind[ind]]), a.combine = "c", ncores = ncores, ind = seq_along(col.ind))
2439
}
2540

41+
#' @rdname fbm_functions_from_qdecr
2642
#' @export
2743
fbm_row_is_0 <- function(X, ncores = 1,
2844
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -34,6 +50,7 @@ fbm_row_is_0 <- function(X, ncores = 1,
3450
bigstatsr::big_apply(X, a.FUN = function(X, ind) apply(X[row.ind[ind], col.ind], 1, function(q) any(q == 0)), a.combine = "c", ncores = ncores, ind = seq_along(row.ind))
3551
}
3652

53+
#' @rdname fbm_functions_from_qdecr
3754
#' @export
3855
fbm_col_is_0 <- function(X, ncores = 1,
3956
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -45,6 +62,7 @@ fbm_col_is_0 <- function(X, ncores = 1,
4562
bigstatsr::big_apply(X, a.FUN = function(X, ind) apply(X[row.ind, col.ind[ind]], 2, function(q) any(q == 0)), a.combine = "c", ncores = ncores, ind = seq_along(col.ind))
4663
}
4764

65+
#' @rdname fbm_functions_from_qdecr
4866
#' @export
4967
fbm_row_sum <- function(X, ncores = 1,
5068
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -56,6 +74,7 @@ fbm_row_sum <- function(X, ncores = 1,
5674
bigstatsr::big_apply(X, a.FUN = function(X, ind) rowSums(X[row.ind[ind], col.ind]), a.combine = "c", ncores = ncores, ind = seq_along(row.ind))
5775
}
5876

77+
#' @rdname fbm_functions_from_qdecr
5978
#' @export
6079
fbm_col_sum <- function(X, ncores = 1,
6180
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -67,6 +86,7 @@ fbm_col_sum <- function(X, ncores = 1,
6786
bigstatsr::big_apply(X, a.FUN = function(X, ind) colSums(X[row.ind, col.ind[ind]]), a.combine = "c", ncores = ncores, ind = seq_along(col.ind))
6887
}
6988

89+
#' @rdname fbm_functions_from_qdecr
7090
#' @export
7191
fbm_row_sd <- function(X, ncores = 1,
7292
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -75,9 +95,10 @@ fbm_row_sd <- function(X, ncores = 1,
7595
if (is.numeric(col.mask)) col.mask <- as.logical(col.mask)
7696
if(!is.null(row.mask)) row.ind <- row.ind[row.mask]
7797
if(!is.null(col.mask)) col.ind <- col.ind[col.mask]
78-
bigstatsr::big_apply(X, a.FUN = function(X, ind) apply(X[row.ind[ind], col.ind], 1, sd), a.combine = "c", ncores = ncores, ind = seq_along(row.ind))
98+
bigstatsr::big_apply(X, a.FUN = function(X, ind) apply(X[row.ind[ind], col.ind], 1, stats::sd), a.combine = "c", ncores = ncores, ind = seq_along(row.ind))
7999
}
80100

101+
#' @rdname fbm_functions_from_qdecr
81102
#' @export
82103
fbm_col_sd <- function(X, ncores = 1,
83104
row.ind = bigstatsr::rows_along(X), col.ind = bigstatsr::cols_along(X),
@@ -86,5 +107,5 @@ fbm_col_sd <- function(X, ncores = 1,
86107
if (is.numeric(col.mask)) col.mask <- as.logical(col.mask)
87108
if(!is.null(row.mask)) row.ind <- row.ind[row.mask]
88109
if(!is.null(col.mask)) col.ind <- col.ind[col.mask]
89-
bigstatsr::big_apply(X, a.FUN = function(X, ind) apply(X[row.ind, col.ind[ind]], 2, sd), a.combine = "c", ncores = ncores, ind = seq_along(col.ind))
110+
bigstatsr::big_apply(X, a.FUN = function(X, ind) apply(X[row.ind, col.ind[ind]], 2, stats::sd), a.combine = "c", ncores = ncores, ind = seq_along(col.ind))
90111
}

R/imp2list.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ imp2list.list <- function(obj) {
4444
imp2list.matrix <- function(obj) imp2list(as.data.frame(obj))
4545

4646
imp2list.mi <- function(obj) {
47-
err <- require(mi)
48-
if (!err) stop("You are trying to load in an `mi` output object, but `mi` is not installed.")
47+
if (!requireNamespace("mi", quietly = TRUE))
48+
stop("You are trying to load in an `mi` output object, but `mi` is not installed.")
4949
mi::complete(obj)
5050
}
5151

5252
imp2list.mids <- function(obj) {
53-
err <- require(mice)
54-
if (!err) stop("You are trying to load in an `mice` output object (class `mids`), but `mice` is not installed.")
53+
if (!requireNamespace("mice", quietly = TRUE))
54+
stop("You are trying to load in an `mice` output object (class `mids`), but `mice` is not installed.")
5555
lapply(seq_len(obj$m), function(y) mice::complete(obj, y))
5656
}
5757

R/io_mgh.R

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
#' Combine all MGH files into one object
22
#'
3-
#' @param input.list path to parent directory
4-
#' @param files.list file names within `input.list`
5-
#'
3+
#' @param input_path path to parent directory
4+
#' @param files_list file names within `input.list`
5+
#' @param mask mask to be used in later steps (i.e. analysis)
6+
#' @param hemi "lh" or "rh"
7+
#' @param measure vertex measure (e.g. "thickness")
8+
#' @param fwhmc the fwhm value in full notation (i.e. 20, 23, 30, etc)
9+
#' @param target the target template (usually "fsaverage")
10+
#' @param n_cores the number of cores to be used
11+
#' @param dir_tmp directory to store the temporary big matrices; useful for shared memory; defaults to `dir_out`
12+
#' @param project the base name you want to assign to the output files
13+
#' @param backing the path to the backing file
14+
#' @param verbose if TRUE, writes out standard log; if FALSE, no output is generated
615
#' @return matrix with vertex data (columns) for each file (rows)
7-
#'
8-
#'
916
qdecr_prep_mgh <- function(input_path,
1017
files_list = list.files(input_path),
1118
mask, hemi, measure, fwhmc, target,
@@ -19,9 +26,10 @@ qdecr_prep_mgh <- function(input_path,
1926
m <- bigstatsr::FBM(temp$ndim1, n, backingfile = backing)
2027
cl <- if(verbose) parallel::makeForkCluster(n_cores, outfile = "") else parallel::makeForkCluster(n_cores)
2128
doParallel::registerDoParallel(cl)
22-
capture.output(pb <- txtProgressBar(0, n, style = 3), file = "/dev/null")
29+
utils::capture.output(pb <- utils::txtProgressBar(0, n, style = 3), file = "/dev/null")
30+
i <- NULL
2331
foreach(i = seq_len(n)) %dopar% {
24-
setTxtProgressBar(pb, i)
32+
utils::setTxtProgressBar(pb, i)
2533
m[,i] <- load.mgh(new_files[i])$x
2634
NULL
2735
}
@@ -117,8 +125,9 @@ load.annot <- function(input.file) {
117125
#'
118126
#' Modified version of save_mgh.m (by Heath Pardoe, 09/12/2013)
119127
#'
120-
#' @param vol MGH object (as from load.mgh)
128+
#' @param fbm a file backed matrix
121129
#' @param fname file name to be used to save out the data
130+
#' @param filter a vector of indices of rows to include of fbm
122131
#'
123132
#' @export
124133
#'

R/plotting.R

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
#'variable. As it opens Freeview directly, you will have access to all the functions
77
#'of Freeview by default. To continue using R, simply close Freeview.
88
#'
9-
#'@param vw The output object of a qdecr call (e.g. qdecr_fastlm)
10-
#'@param stack Either a numeric or a string for your variable (use `stacks(vw)`)
11-
#'@param type The type of map to plot (currently for OLS). Default is `coef`, others are `se`, `t` and `p`
12-
#'@param sig Logical; if TRUE (default), only the significant clusters are shown
13-
#'@param ... any arguments that freeview (on command line) normally takes for manipulating surface files
14-
#'@return NULL
15-
#'@export
9+
#' @param vw The output object of a qdecr call (e.g. qdecr_fastlm)
10+
#' @param stack Either a numeric or a string for your variable (use `stacks(vw)`)
11+
#' @param type The type of map to plot (currently for OLS). Default is `coef`, others are `se`, `t` and `p`
12+
#' @param sig Logical; if TRUE (default), only the significant clusters are shown
13+
#' @param ... any arguments that freeview (on command line) normally takes for manipulating surface files
14+
#' @return NULL
15+
#' @export
1616

1717
freeview <- function(vw, stack = NULL, type = c("coef", "se", "t", "p"), sig = TRUE, ...) {
1818
if (is.null(stack)) stop("`stack` not defined. Please choose: ", paste(stacks(vw), collapse = ", "))
@@ -132,20 +132,21 @@ freeview_surf_cmd <- function(surface,
132132
#'This function works on top of the base `hist` function. It simply makes a histogram
133133
#'of the mean vertex values either per vertex or per subject (if you specify `qtype = "subject"`)
134134
#'
135-
#'@param vw The output object of a qdecr call (e.g. qdecr_fastlm)
136-
#'@param qtype A string; either "vertex" for vertex-wise means, or "subject" for subject-wise means
137-
#'@param xlab See `?hist`
138-
#'@param main see `?hist`
139-
#'@param ... Further arguments for `hist`
140-
#'@return see `?hist`
141-
#'@export
135+
#' @param x The output object of a qdecr call (e.g. qdecr_fastlm)
136+
#' @param qtype A string; either "vertex" for vertex-wise means, or "subject" for subject-wise means
137+
#' @param xlab See `?hist`
138+
#' @param main see `?hist`
139+
#' @param ... Further arguments for `hist`
140+
#' @return see `?hist`
141+
#' @method hist vw
142+
#' @export
142143
#'
143-
hist.vw <- function(vw, qtype = c("vertex", "subject"), xlab = NULL, main = NULL, ...) {
144+
hist.vw <- function(x, qtype = c("vertex", "subject"), xlab = NULL, main = NULL, ...) {
144145
qtype <- match.arg(qtype)
145-
x <- if(qtype == "vertex") vw$post$mgh_description$vertex_mean else vw$post$mgh_description$subject_mean
146-
if (is.null(xlab)) xlab <- vw$input$measure
146+
y <- if(qtype == "vertex") x$post$mgh_description$vertex_mean else x$post$mgh_description$subject_mean
147+
if (is.null(xlab)) xlab <- x$input$measure
147148
if (is.null(main)) main <- qtype
148-
hist(x[], xlab = xlab, main = main, ...)
149+
graphics::hist(y[], xlab = xlab, main = main, ...)
149150
}
150151

151152
#'Opens Freeview to take snapshots
@@ -156,18 +157,18 @@ hist.vw <- function(vw, qtype = c("vertex", "subject"), xlab = NULL, main = NULL
156157
#'and additionally composes the images and plots them. Magick++ is required
157158
#'for the composing step (see www.qdecr.com).
158159
#'
159-
#'@param vw The output object of a qdecr call (e.g. qdecr_fastlm)
160-
#'@param stack Either a numeric or a string for your variable (use `stacks(vw)`)
161-
#'@param type The type of map to plot (currently for OLS). Default is `coef`, others are `se`, `t` and `p`
162-
#'@param ext Extension of the image files that will be stored on disk
163-
#'@param zoom Float that determines how far the brains are zoomed in
164-
#'@param compose Logical; if TRUE, a single compiled image will be made (requires Magick++)
165-
#'@param plot_brain Logical; if TRUE, returns a graphical device with the composed images
166-
#'@param save_plot Logical; if TRUE, saves the composed image
167-
#'@param sig Logical; if TRUE, only the significant clusters are shown
168-
#'@param ... any arguments that freeview (on command line) normally takes for manipulating surface files
169-
#'@return NULL
170-
#'@export
160+
#' @param vw The output object of a qdecr call (e.g. qdecr_fastlm)
161+
#' @param stack Either a numeric or a string for your variable (use `stacks(vw)`)
162+
#' @param type The type of map to plot (currently for OLS). Default is `coef`, others are `se`, `t` and `p`
163+
#' @param ext Extension of the image files that will be stored on disk
164+
#' @param zoom Float that determines how far the brains are zoomed in
165+
#' @param compose Logical; if TRUE, a single compiled image will be made (requires Magick++)
166+
#' @param plot_brain Logical; if TRUE, returns a graphical device with the composed images
167+
#' @param save_plot Logical; if TRUE, saves the composed image
168+
#' @param sig Logical; if TRUE, only the significant clusters are shown
169+
#' @param ... any arguments that freeview (on command line) normally takes for manipulating surface files
170+
#' @return NULL
171+
#' @export
171172

172173
qdecr_snap <- function(vw, stack = NULL, type = c("coef", "se", "t", "p"), ext = ".tiff", zoom = 1, compose = TRUE, plot_brain = TRUE, save_plot = TRUE, sig = TRUE, ...) {
173174
if (is.null(stack)) stop("`stack` not defined. Please choose: ", paste(stacks(vw), collapse = ", "))
@@ -195,7 +196,7 @@ qdecr_snap <- function(vw, stack = NULL, type = c("coef", "se", "t", "p"), ext =
195196
qsnap(snap_names[4]),
196197
"--quit")
197198
tfile <- file.path(vw$paths$dir_tmp, "tmp_snapshot_qdecr.txt")
198-
write.table(snap_cmd, tfile, quote = F, row.names = F, col.names = F)
199+
utils::write.table(snap_cmd, tfile, quote = F, row.names = F, col.names = F)
199200
on.exit(file.remove(tfile))
200201

201202
type <- match.arg(type)
@@ -271,7 +272,7 @@ qdecr_snap <- function(vw, stack = NULL, type = c("coef", "se", "t", "p"), ext =
271272
ia1 <- magick::image_append(nn2[1:2])
272273
ia2 <- magick::image_append(nn2[3:4])
273274
p <- magick::image_append(c(ia1, ia2), stack = TRUE)
274-
if (plot_brain) print(plot(p))
275+
if (plot_brain) print(graphics::plot(p))
275276
if (save_plot) magick::image_write(p, paste0(name, ".", "plot", ext))
276277
return(p)
277278
} else {

R/qdecr.R

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,36 @@
66
#' .mgh format data as input and allows statistical analyses per vertex. A variety
77
#' of statistical models have been implemented, such as linear regression.
88
#'
9-
#' @param a test
10-
#' @param b test
11-
#' @param c test
12-
#' @param d test
13-
#' @param e test
14-
#' @param f test
15-
#' @param g test
16-
#' @param h test
9+
#' @param id the name of the id variable that matches the dataset to the Freesurfer output
10+
#' @param data a required argument that contains a data frame, a list of data frames or an imputed object that is supported by the `imp2list` function (mice, mi, etc.).
11+
#' @param vertex the preposition to the vertex measure (default: "qdecr_")
12+
#' @param margs the arguments that should be provided to the function of interest (e.g. stats::lm)
13+
#' @param model the function to grab the arguments from (this will be removed in a later version)
14+
#' @param target the target template (default = "fsaverage")
15+
#' @param hemi hemisphere to analyze ("lh" or "rh")
16+
#' @param measure the vertex-wise measure to use ("thickness", "area", etc.)
17+
#' @param fwhm full width half max (default = 10 mm, for pial_lgi it is 5 mm)
18+
#' @param mcz_thr A numeric value for the Monte Carlo simulation threshold (default: 0.001). Any of the following are accepted (equivalent values separate by `/`): 13/1.3/0.05, 20/2.0/0.01, 23/2.3/0.005, 30/3.0/0.001, 33/3.3/0.0005, 40/4.0/0.0001.
19+
#' @param cwp_thr the cluster-wise p-value threshold on top of all correction (default = 0.025, as there are 2 hemispheres)
20+
#' @param mgh NOT IMPLEMENTED; path to existing merged mgh file, default is NULL
21+
#' @param mask mgh file to mask analysis; default is to use the cortex label from the target
22+
#' @param mask_path path to the mask; default is the cortex mask that is provided with the QDECR package
23+
#' @param project the base name you want to assign to the output files
24+
#' @param dir_subj directory contain the surface-based maps (mgh files); defaults to SUBJECTS_DIR
25+
#' @param dir_fshome Freesurfer directory; defaults to FREESURFER_HOME
26+
#' @param dir_tmp directory to store the temporary big matrices; useful for shared memory; defaults to `dir_out`
27+
#' @param dir_out the directory where to save the data to (defaults to the current directory)
28+
#' @param dir_out_tree if TRUE, creates a dir_out/project directory. If FALSE, all output is placed directory into dir_out
29+
#' @param file_out_tree if TRUE, adds the full project name to the output file names. By default it is the inverse of dir_out_tree
30+
#' @param clean_up NOT IMPLEMENTED; will be used for setting cleaning of other files
31+
#' @param clean_up_bm if TRUE, cleans all big matrices (.bk) that were generated in dir_tmp
32+
#' @param clobber if TRUE, ignores already existing directories and writes over them; if FALSE, stops and warns user that a given directory already exists
33+
#' @param verbose if TRUE, writes out standard log; if FALSE, no output is generated
34+
#' @param debug NOT IMPLEMENTED; will output the maximal log to allow for easy debugging
35+
#' @param n_cores the number of cores to be used
36+
#' @param prep_fun Name of the function that needs to be called for the preparation step (do not touch unless you know what you are doing!)
37+
#' @param analysis_fun Name of the function that needs to be called for the analysis step (do not touch unless you know what you are doing!)
38+
#' @param chunk_size Integer; the desired chunk size for the chunked lm
1739
#'
1840
#' @return out
1941
#' @importFrom foreach %dopar%
@@ -52,14 +74,13 @@ qdecr <- function(id,
5274
n_cores = 1,
5375
prep_fun = "prep_fastlm",
5476
analysis_fun = "analysis_chunkedlm",
55-
chunk_size = 1000,
56-
sander = FALSE
77+
chunk_size = 1000
5778
){
5879

5980
if (verbose) {
6081
message("\n")
61-
catprompt(paste0("QDECR v", packageVersion("QDECR")))
62-
message(paste0("Welcome to QDECR (v", packageVersion("QDECR"), ")"))
82+
catprompt(paste0("QDECR v", utils::packageVersion("QDECR")))
83+
message(paste0("Welcome to QDECR (v", utils::packageVersion("QDECR"), ")"))
6384
message("Authors: Sander Lamballais & Ryan Muetzel")
6485
message("Website: www.qdecr.com")
6586
message("Repository: www.github.com/slamballais/QDECR")
@@ -187,7 +208,6 @@ qdecr <- function(id,
187208
catprompt("Summarizing results", verbose = verbose)
188209

189210
# Post-describe
190-
if (sander) return(vw)
191211
vw$describe <- qdecr_post_describe(vw, verbose = verbose)
192212
vw$summary <- summary(vw, verbose = verbose)
193213
if(clean_up_bm) vw$mgh <- NULL

R/qdecr_analysis.R

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ analysis_chunkedlm <- function(vw, chunk) {
3939
doParallel::registerDoParallel(cl)
4040
on.exit(parallel::stopCluster(cl))
4141

42-
capture.output(pb <- txtProgressBar(0, length(cstart), style = 3), file = "/dev/null")
42+
utils::capture.output(pb <- utils::txtProgressBar(0, length(cstart), style = 3), file = "/dev/null")
4343

44+
i <- NULL
4445
foreach::foreach (i = seq_along(cstart), .combine = "c") %dopar% {
45-
setTxtProgressBar(pb, i)
46+
utils::setTxtProgressBar(pb, i)
4647

4748
id <- iv[cstart[i]:cend[i]]
4849

R/qdecr_decon.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ qdecr_extract <- function(margs, model){
1616
qdecr_setnames <- function(margs, model){
1717
m <- names(margs)
1818
if(is.null(m)) m <- rep("", length(margs))
19-
f <- formalArgs(get2(model))
19+
f <- methods::formalArgs(get2(model))
2020
f2 <- formals(get2(model))
2121
b <- which(m[-1] == "")
2222
m[b+1] <- f[!f %in% m[-1]][length(b)]

0 commit comments

Comments
 (0)