comparison launcher.R @ 1:4e73ea176c34 draft default tip

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/rgcca commit ce05b5eb018ae1c4d580ab5ce1a33896c1aa8c5b"
author iuc
date Sun, 18 Jul 2021 18:03:12 +0000
parents 067d45e6caa9
children
comparison
equal deleted inserted replaced
0:067d45e6caa9 1:4e73ea176c34
1 #!/usr/bin/env Rscript
2
1 # Author: Etienne CAMENEN 3 # Author: Etienne CAMENEN
2 # Date: 2020 4 # Date: 2021
3 # Contact: arthur.tenenhaus@centralesupelec.fr 5 # Contact: etienne.camenen@gmail.com
4 # Key-words: omics, RGCCA, multi-block 6 # Key-words: omics, RGCCA, multi-block
5 # EDAM operation: analysis, correlation, visualisation 7 # EDAM operation: analysis, correlation, visualisation
6 # 8 #
7 # Abstract: Performs multi-variate analysis (PCA, CCA, PLS, R/SGCCA, etc.) 9 # Abstract: Performs multi-variate analysis (PCA, CCA, PLS, R/SGCCA, etc.)
8 # and produces textual and graphical outputs (e.g. variables and individuals 10 # and produces textual and graphical outputs (e.g. variables and individuals
72 make_option( 74 make_option(
73 opt_str = "--type", 75 opt_str = "--type",
74 type = "character", 76 type = "character",
75 metavar = "character", 77 metavar = "character",
76 default = opt[2], 78 default = opt[2],
77 help = "Type of analysis [default: %default] (among: rgcca, pca, 79 help = "Type of analysis [default: %default] (among: rgcca, sgcca,
78 cca, gcca, cpca-w, hpca, maxbet-b, maxbet, maxdiff-b, maxdiff, 80 pca, spca, pls, spls, cca, ifa, ra, gcca, maxvar, maxvar-b,
79 maxvar-a, maxvar-b, maxvar, niles, r-maxvar, rcon-pca, ridge-gca, 81 maxvar-a, mcoa,cpca-1, cpca-2, cpca-4, hpca, maxbet-b, maxbet,
80 sabscor, ssqcor, ssqcor, ssqcov-1, ssqcov-2, ssqcov, sum-pca, 82 maxdiff-b, maxdiff, maxvar-a, sabscor, ssqcor, ssqcov-1, ssqcov-2,
81 sumcor, sumcov-1, sumcov-2, sumcov)" 83 ssqcov, sumcor, sumcov-1, sumcov-2, sumcov, sabscov, sabscov-1,
84 sabscov-2)"
82 ), 85 ),
83 make_option( 86 make_option(
84 opt_str = "--ncomp", 87 opt_str = "--ncomp",
85 type = "character", 88 type = "character",
86 metavar = "integer list", 89 metavar = "integer list",
243 ) 246 )
244 ) 247 )
245 return(optparse::OptionParser(option_list = option_list)) 248 return(optparse::OptionParser(option_list = option_list))
246 } 249 }
247 250
248 char_to_list <- function(x) {
249 strsplit(gsub(" ", "", as.character(x)), ",")[[1]]
250 }
251
252 check_arg <- function(opt) { 251 check_arg <- function(opt) {
253 # Check the validity of the arguments opt : an optionParser object 252 # Check the validity of the arguments opt : an optionParser object
254 253
255 if (is.null(opt$datasets)) 254 if (is.null(opt$datasets))
256 stop_rgcca(paste0("datasets is required."), exit_code = 121) 255 stop_rgcca(paste0("datasets is required."), exit_code = 121)
315 for (x in c("compx", "compy")) 314 for (x in c("compx", "compy"))
316 opt[[x]] <- check_compx(x, opt[[x]], rgcca$call$ncomp, opt$block) 315 opt[[x]] <- check_compx(x, opt[[x]], rgcca$call$ncomp, opt$block)
317 316
318 return(opt) 317 return(opt)
319 } 318 }
320
321 check_integer <- function(x, y = x, type = "scalar", float = FALSE, min = 1) {
322
323 if (is.null(y))
324 y <- x
325
326 if (type %in% c("matrix", "data.frame"))
327 y_temp <- y
328
329 y <- suppressWarnings(as.double(as.matrix(y)))
330
331 if (any(is.na(y)))
332 stop_rgcca(paste(x, "should not be NA."))
333
334 if (!is(y, "numeric"))
335 stop_rgcca(paste(x, "should be numeric."))
336
337 if (type == "scalar" && length(y) != 1)
338 stop_rgcca(paste(x, "should be of length 1."))
339
340 if (!float)
341 y <- as.integer(y)
342
343 if (all(y < min))
344 stop_rgcca(paste0(x, " should be higher than or equal to ", min, "."))
345
346 if (type %in% c("matrix", "data.frame"))
347 y <- matrix(
348 y,
349 dim(y_temp)[1],
350 dim(y_temp)[2],
351 dimnames = dimnames(y_temp)
352 )
353
354 if (type == "data.frame")
355 as.data.frame(y)
356
357 return(y)
358 }
359
360 load_libraries <- function(librairies) {
361 for (l in librairies) {
362 if (!(l %in% installed.packages()[, "Package"]))
363 utils::install.packages(l, repos = "cran.us.r-project.org")
364 suppressPackageStartupMessages(
365 library(
366 l,
367 character.only = TRUE,
368 warn.conflicts = FALSE,
369 quietly = TRUE
370 ))
371 }
372 }
373
374 stop_rgcca <- function(
375 message,
376 exit_code = "1",
377 call = NULL) {
378
379 base::stop(
380 structure(
381 class = c(exit_code, "simpleError", "error", "condition"),
382 list(message = message, call. = NULL)
383 ))
384 }
385 319
386 ########## Main ########## 320 ########## Main ##########
387 321
388 # Get arguments : R packaging install, need an opt variable with associated 322 # Get arguments : R packaging install, need an opt variable with associated
389 # arguments 323 # arguments
409 c("agriculture", "industry", "politic"), 343 c("agriculture", "industry", "politic"),
410 ".tsv", 344 ".tsv",
411 collapse = ",") 345 collapse = ",")
412 ) 346 )
413 347
414 load_libraries(c("ggplot2", "optparse", "scales", "igraph", "MASS", "rlang", "Deriv")) 348 # Load functions
349 all_funcs <- unclass(lsf.str(envir = asNamespace("RGCCA"), all = TRUE))
350 for (i in all_funcs)
351 eval(parse(text = paste0(i, "<-RGCCA:::", i)))
352
353 load_libraries(c("ggplot2", "optparse", "scales", "igraph", "MASS", "Deriv"))
415 try(load_libraries("ggrepel"), silent = TRUE) 354 try(load_libraries("ggrepel"), silent = TRUE)
416 355
417 tryCatch( 356 tryCatch(
418 opt <- check_arg(optparse::parse_args(get_args())), 357 opt <- check_arg(optparse::parse_args(get_args())),
419 error = function(e) { 358 error = function(e) {
421 stop_rgcca(e[[1]], exit_code = 140) 360 stop_rgcca(e[[1]], exit_code = 140)
422 }, warning = function(w) 361 }, warning = function(w)
423 stop_rgcca(w[[1]], exit_code = 141) 362 stop_rgcca(w[[1]], exit_code = 141)
424 ) 363 )
425 364
426 # Load functions
427 all_funcs <- unclass(lsf.str(envir = asNamespace("RGCCA"), all = T))
428 for (i in all_funcs)
429 eval(parse(text = paste0(i, "<-RGCCA:::", i)))
430
431 # Set missing parameters by default 365 # Set missing parameters by default
432 opt$header <- !("header" %in% names(opt)) 366 opt$header <- !("header" %in% names(opt))
433 opt$superblock <- !("superblock" %in% names(opt)) 367 opt$superblock <- !("superblock" %in% names(opt))
434 opt$scale <- !("scale" %in% names(opt)) 368 opt$scale <- !("scale" %in% names(opt))
435 opt$text <- !("text" %in% names(opt)) 369 opt$text <- !("text" %in% names(opt))
370 cex_lab <- 20
371 cex_main <- 25
372 cex_point <- 3
373 cex_sub <- 20
374 cex_axis <- 10
375 cex <- 1.25
436 376
437 status <- 0 377 status <- 0
438 tryCatch({ 378 tryCatch({
439 379
440 blocks <- load_blocks(opt$datasets, opt$names, opt$separator) 380 blocks <- load_blocks(opt$datasets, opt$names, opt$separator)
448 response = opt$response, 388 response = opt$response,
449 superblock = opt$superblock, 389 superblock = opt$superblock,
450 ncomp = opt$ncomp, 390 ncomp = opt$ncomp,
451 scheme = opt$scheme, 391 scheme = opt$scheme,
452 scale = opt$scale, 392 scale = opt$scale,
453 type = opt$type 393 method = opt$type
454 ) 394 )
455 ) 395 )
456 if (tolower(opt$type) %in% c("sgcca", "spca", "spls")) { 396 if (tolower(opt$type) %in% c("sgcca", "spca", "spls")) {
457 func[["sparsity"]] <- opt$penalty 397 func[["sparsity"]] <- opt$penalty
458 }else { 398 }else {
475 opt$compx, 415 opt$compx,
476 opt$compy, 416 opt$compy,
477 opt$block, 417 opt$block,
478 opt$text, 418 opt$text,
479 opt$block_y, 419 opt$block_y,
480 "Response" 420 "Response",
421 cex_lab = cex_lab,
422 cex_point = cex_point,
423 cex_main = cex_main,
424 cex = cex
481 ) 425 )
482 ) 426 )
483 save_plot(opt$o1, individual_plot) 427 save_plot(opt$o1, individual_plot)
484 } 428 }
485 429
489 rgcca_out, 433 rgcca_out,
490 opt$compx, 434 opt$compx,
491 opt$compy, 435 opt$compy,
492 opt$block, 436 opt$block,
493 opt$text, 437 opt$text,
494 n_mark = opt$nmark 438 n_mark = opt$nmark,
439 cex_lab = cex_lab,
440 cex_point = cex_point,
441 cex_main = cex_main,
442 cex = cex
495 ) 443 )
496 ) 444 )
497 save_plot(opt$o2, corcircle) 445 save_plot(opt$o2, corcircle)
498 } 446 }
499 447
500 top_variables <- plot_var_1D( 448 top_variables <- plot_var_1D(
501 rgcca_out, 449 rgcca_out,
502 opt$compx, 450 opt$compx,
503 opt$nmark, 451 opt$nmark,
504 opt$block, 452 opt$block,
505 type = "cor" 453 type = "loadings",
454 title = paste0("Variable correlations", ": ", names(rgcca_out$call$blocks)[opt$block], " with "),
455 cex_sub = cex_sub,
456 cex_main = cex_main,
457 cex_axis = cex_axis,
458 cex = cex
506 ) 459 )
507 save_plot(opt$o3, top_variables) 460 save_plot(opt$o3, top_variables)
508 461
509 # Average Variance Explained 462 # Average Variance Explained
510 (ave <- plot_ave(rgcca_out)) 463 (ave <- plot_ave(
464 rgcca_out,
465 cex_main = cex_main,
466 cex_sub = cex_sub,
467 cex_axis = cex_axis,
468 cex = cex))
511 save_plot(opt$o4, ave) 469 save_plot(opt$o4, ave)
512 470
513 # Creates design scheme 471 # Creates design scheme
514 design <- function() plot_network(rgcca_out) 472 design <- function() plot_network(
473 rgcca_out,
474 cex_main = cex_main,
475 cex_point = cex_point,
476 cex = cex)
515 save_plot(opt$o5, design) 477 save_plot(opt$o5, design)
516 478
517 save_ind(rgcca_out, opt$compx, opt$compy, opt$o6) 479 save_ind(rgcca_out, opt$o6)
518 save_var(rgcca_out, opt$compx, opt$compy, opt$o7) 480 save_var(rgcca_out, opt$o7)
519 save(rgcca_out, file = opt$o8) 481 save(rgcca_out, file = opt$o8)
520 482
521 }, error = function(e) { 483 }, error = function(e) {
522 if (class(e)[1] %in% c("simpleError", "error", "condition")) 484 if (class(e)[1] %in% c("simpleError", "error", "condition"))
523 status <<- 1 485 status <<- 1
524 else 486 else
525 status <<- class(e)[1] 487 status <<- class(e)[1]
488 msg <- "The design matrix C"
489 if (grepl(msg, e$message)) {
490 e$message <- gsub(msg, "The connection file", e$message)
491 }
526 message(e$message) 492 message(e$message)
527 }) 493 })
528 quit(status = status) 494 quit(status = status)