secmalasct/utils.R
Jens Sauer 30c03f01d0 Remove unused factor levels from data after limiting
After limiting the data there may be factors with empty levels. This can
be confusing and should be avoided.
2020-11-19 13:16:34 +01:00

127 lines
3.6 KiB
R

# secMalASCT utilities
#
# License: GPL version 3
# Jens Mathis Sauer (c) 2020
#
# Write plot to filename
#
# This will plot "fun" with arguments "..." as filetype "ftype" and
# the output to "filename". Title and legends can be passed as list,
# or NULL if not needed.
# Default filesize is 3000x3000 px and 300 dpi resolution.
#
sma_plot_file <- function(fname, ftype, fun) {
# Open file for writing
ftype(filename = fname, width = 3000, height = 3000, res = 300)
#
# Write plot into variable, then printing it manually. This is
# needed to save plots from package "survminer" at the moment.
#
# See: https://github.com/kassambara/survminer/issues/152
#
p <- fun()
print(p)
# hide "null device 1" in garbage
garbage <- dev.off()
}
#
# Load secMalASCT data
#
# This loads the secMalASCT data from a CSV file and adjusts some
# columns to the correct type.
#
sma_load_data <- function(file) {
sma <- as_tibble(read.csv(file, header = TRUE))
# Type adjustments
sma$follow_up_multi <- as.logical(sma$follow_up_multi)
sma$nicotin_history <- as.logical(sma$nicotin_history)
sma$relapse_treatment_asct <- as.logical(sma$relapse_treatment_asct)
sma$relapse_treatment_chemotherapy <- as.logical(sma$relapse_treatment_chemotherapy)
sma$relapse_treatment_radiotherapy <- as.logical(sma$relapse_treatment_radiotherapy)
sma$relapse_treatment_surgery <- as.logical(sma$relapse_treatment_surgery)
sma$pre_rt <- as.logical(sma$pre_rt)
sma$pre_rt_type <- as.factor(sma$pre_rt_type)
sma$post_rt <- as.logical(sma$post_rt)
sma$post_rt_type <- as.factor(sma$post_rt_type)
sma$pre_alkylating_agents <- as.logical(sma$pre_alkylating_agents)
sma$pre_topoisomerase <- as.logical(sma$pre_topoisomerase)
sma$pre_anthracyclines <- as.logical(sma$pre_anthracyclines)
sma$peri_alkylating_agents <- as.logical(sma$peri_alkylating_agents)
sma$peri_topoisomerase <- as.logical(sma$peri_topoisomerase)
sma$peri_anthracyclines <- as.logical(sma$peri_anthracyclines)
sma$post_alkylating_agents <- as.logical(sma$post_alkylating_agents)
sma$post_topoisomerase <- as.logical(sma$post_topoisomerase)
sma$post_anthracyclines <- as.logical(sma$post_anthracyclines)
sma$maintenance_treatment <- as.logical(sma$maintenance_treatment)
sma$maintenance_treatment_time <- as.integer(sma$maintenance_treatment_time)
sma$maintenance_treatment_type <- as.factor(sma$maintenance_treatment_type)
sma$thalidomid <- as.logical(sma$thalidomid)
sma$bortezomib <- as.logical(sma$bortezomib)
#
# Limit to patients which are at least 16.0 years old at time
# of transplantation.
sma <- filter(sma, asct_age >= 16.0)
# At this time only solid tumors are important
sma <- filter(sma, diagnosis_type == "solid")
# After filtering unused levels must be cleared from the data
sma <- droplevels(sma)
return(sma)
}
#
# Global break.time.by value
#
sma_break.time.by = 5 * 365.25
#
# Initialize secMalASCT workspace
#
# This function can be called multiple times, the data will only
# be loaded once. To manually reload data call:
# > sma_init_force()
#
sma_init <- function() {
if (exists("sma_initialized") == FALSE) {
print("Initialize secMalASCT workspace")
print("Loading libraries")
library(survival)
library(survminer)
library(tidyverse)
print("Loading data")
#
# Use superassignment operator '<<-' to make
# secmal and sma_initialized with global scope.
#
secmal <<- sma_load_data("data/data.csv")
sma_initialized <<- TRUE
}
}
#
# Force reinitialization of workspace
#
# Forcefully calls sma_init() again.
#
sma_init_force <- function() {
print("Reloading secMalASCT data")
remove(sma_initialized, pos = ".GlobalEnv")
sma_init()
}