Spaces:
Sleeping
Sleeping
| ##' Checking duplicated metabolites from alignment table | |
| ##' | |
| ##' @title Checking duplicated metabolites from alignment table | |
| ##' @param data Lipidomics alignment file form MS-DIAL analysis | |
| ##' @return The alignment table with duplicated metabolites removed. | |
| ##' @examples | |
| ##' data <- read.csv("D:/100cells/20240222/lipid_metabolome.csv",header = F) | |
| ##' result <- Metabolite_duplicate_check(data) | |
| ##' @references | |
| ##' @author Takaki Oka | |
| ##' @export | |
| Metabolite_duplicate_check <- function(data){ | |
| # convert rownames to column for row index | |
| ontology_column <- 12 | |
| batch_id_row <- 2 | |
| peakinfo_column <- 1:35 | |
| header_row <- 5 | |
| peaktable <- data[, !data[batch_id_row, ] %in% NA, drop = FALSE] | |
| originalcolnum <- colnames(peaktable) | |
| peaktable <- peaktable %>% | |
| setNames(peaktable[5,]) %>% | |
| rownames_to_column() | |
| # Find rows with max 'Fill %' for each 'Metabolite name' | |
| check_duplicates <- peaktable %>% | |
| group_by(`Metabolite name`) %>% | |
| slice_max(`Fill %`,n=1) %>% | |
| ungroup() | |
| id <- check_duplicates$rowname | |
| datav2 <- peaktable %>% | |
| filter(rowname %in% c(id, 1:5)) %>% | |
| dplyr::select(-rowname) | |
| colnames(datav2) <- originalcolnum | |
| return(datav2) | |
| } | |
| ##' Converting alignment file | |
| ##' | |
| ##' @title Converting alignment file to dataframe | |
| ##' @param data alignment file form MS-DIAL analysis | |
| ##' @return dataframe of alignment file | |
| ##' @examples | |
| ##' process_alignment_file(data) | |
| ##' @references | |
| ##' @author Takaki OKA | |
| ##' @export | |
| process_alignment_file <- function(data) { | |
| ontology_column <- 12 | |
| batch_id_row <- 2 | |
| peakinfo_column <- 1:35 | |
| header_row <- 5 | |
| data <- Metabolite_duplicate_check(data) | |
| #data <- Median_normalize_to_alignment_format(data) | |
| peaktable <- data[, !data[batch_id_row, ] %in% NA, drop = FALSE] | |
| peaktable <- peaktable[, peaktable[batch_id_row, ] == "Sample", drop = FALSE] | |
| sample_info <- data.frame(name = unlist(peaktable[5, ]), | |
| Class = unlist(peaktable[1, ])) | |
| peaktable <- cbind(data[, peakinfo_column], peaktable) | |
| colnames(peaktable) <- peaktable[header_row, ] | |
| peaktable <- peaktable[-c(1:header_row), ] | |
| peaktable[, -peakinfo_column] <- data.frame(lapply(peaktable[, -peakinfo_column], as.numeric)) | |
| peaktable <- distinct(peaktable,`Metabolite name`,.keep_all = TRUE) | |
| lipid_info <- peaktable[, colnames(peaktable) %in% c("Metabolite name","Ontology",sample_info$name)] | |
| peak_info <- peaktable[, !colnames(peaktable) %in% c("Metabolite name", sample_info$name)] | |
| return(list(lipid_info,sample_info,peak_info)) | |
| } | |
| ##' Median normalizeing of alignment table wuth retaining alignment format | |
| ##' | |
| ##' @title Median normalizeing of alignment table | |
| ##' @param data Lipidomics alignment file form MS-DIAL analysis | |
| ##' @return Median normalized data with alignment format | |
| ##' @examples | |
| ##' data <- read.csv("D:/100cells/20240222/lipid_metabolome.csv",header = F) | |
| ##' result <- Median_normalize(data) | |
| ##' @references | |
| ##' @author Nami Sakamoto, Takaki Oka | |
| ##' @export | |
| Median_normalize_to_alignment_format <- function(data){ | |
| # Extract lipidontinf | |
| peakinfo <- data[5:nrow(data), c(1:35)] | |
| lipidontinf <- data[5:nrow(data), c(4, 12)] | |
| colnames(lipidontinf) <- lipidontinf[1,] | |
| lipidontinf <- lipidontinf[-1,] | |
| rownames(lipidontinf) <- NULL | |
| # Extract sample information | |
| sampleinf <- t(data[1:4, 35:ncol(data)]) | |
| sampledata <- t(data[5:nrow(data), 36:ncol(data)]) | |
| Metabolitename <- t(data[-c(1:4), 4]) | |
| # Combine sample information | |
| colnames(sampledata) <- colnames(Metabolitename) | |
| datav2_v2 <- cbind(data.frame(sampleinf, rbind(data.frame(Metabolitename), data.frame(sampledata)))) | |
| colnames(datav2_v2) <- datav2_v2[1,] | |
| datav2_v2 <- datav2_v2[-1,] | |
| rownames(datav2_v2) <- NULL | |
| names(datav2_v2)[5] <- "name" | |
| # Filter out 'Batch ID' values and process numeric data | |
| lipidmetabolomedata_all <- datav2_v2 %>% | |
| filter(!`Batch ID` %in% c('Average', 'Stdev')) | |
| numericdata <- lipidmetabolomedata_all[, -c(1:4)] | |
| rownames(numericdata) <- NULL | |
| numericdatax <- as.data.frame(sapply(numericdata[, -1], as.numeric)) | |
| rownames(numericdatax) <- lipidmetabolomedata_all$name | |
| numericdatax2 <- numericdatax %>% | |
| tibble::rownames_to_column() %>% | |
| dplyr::rename(sampleid = rowname) %>% | |
| pivot_longer(!sampleid, names_to = "lipidname", values_to = "value") | |
| log2value <- numericdatax2 %>% | |
| mutate(log2value = log2(value)) %>% | |
| dplyr::select(-value) %>% | |
| pivot_wider(names_from = "lipidname", values_from = "log2value") %>% | |
| column_to_rownames(var = "sampleid") | |
| samplemedian <- log2value %>% apply(1,median) %>% as.data.frame() | |
| colnames(samplemedian) <- "median" | |
| mean_forsamplemedian <- mean(samplemedian$median) | |
| log2mediannormalizedata <- rownames_to_column(log2value) %>% | |
| dplyr::rename(sampleid = rowname) %>% | |
| left_join(rownames_to_column(samplemedian), by = c("sampleid" = "rowname")) %>% | |
| pivot_longer(!c(sampleid, median), names_to = "lipidname", values_to = "log2value") %>% | |
| mutate(mediannormvalue = log2value - median + mean_forsamplemedian) %>% | |
| dplyr::select(-c(log2value, median)) %>% | |
| pivot_wider(names_from = "lipidname", values_from = "mediannormvalue") %>% | |
| column_to_rownames(var = "sampleid") | |
| log2_2xmediannormalizedata <- 2^log2mediannormalizedata | |
| log2_2xmediannormalizedata_0 <- lipidmetabolomedata_all[, c(1:5)] %>% | |
| left_join(rownames_to_column(log2_2xmediannormalizedata), by = c("name" = "rowname")) %>% t() %>% data.frame()%>% rownames_to_column("V0") | |
| aligntable <- right_join(peakinfo,log2_2xmediannormalizedata_0,by = c("V4" = "V0")) | |
| headerrow <- tail(aligntable,n = 5) | |
| aligntable <- rbind(headerrow,aligntable) | |
| aligntable[1:5,1:35] <- data[1:5,1:35] | |
| aligntable <- filter(aligntable,is.na(V1)==F) | |
| return(aligntable) | |
| } | |
| ##' Converting alignment file to expression data of lipid class | |
| ##' | |
| ##' @title Converting alignment file to dataframe | |
| ##' @param data alignment file form MS-DIAL analysis | |
| ##' @return Expression data of lipid class and sample meta data | |
| ##' @examples | |
| ##' convert_msdial_export_to_lipid_class_dataframe(data) | |
| ##' @references | |
| ##' @author Takaki OKA | |
| ##' @export | |
| convert_msdial_export_to_lipid_class_dataframe <- function(data) { | |
| data_frame <- process_alignment_file(data) | |
| lipid_info <- data_frame[[1]] | |
| sample_info <- data_frame[[2]] | |
| lipidtable <- lipid_info[,colnames(lipid_info) %in% c("Metabolite name","Ontology", sample_info$name)] %>% pivot_longer(cols = -(1:2)) | |
| lipidtable <- lipidtable %>% | |
| group_by(name, Ontology) %>% | |
| mutate(mean = mean(value)) %>% | |
| ungroup() %>% | |
| distinct(name, Ontology, .keep_all = TRUE) %>% | |
| dplyr::select(-c("Metabolite name", value)) %>% | |
| pivot_wider(values_from = mean, names_from = Ontology) | |
| return(list(lipidtable,sample_info)) | |
| } | |
| ##' Converting alignment file to expression data of lipid molecules | |
| ##' | |
| ##' @title Converting alignment file to dataframe | |
| ##' @param data alignment file form MS-DIAL analysis | |
| ##' @return Expression data of lipid molecules and sample meta data | |
| ##' @examples | |
| ##' convert_msdial_export_to_lipid_molecules_dataframe(data) | |
| ##' @references | |
| ##' @author Takaki OKA | |
| ##' @export | |
| convert_msdial_export_to_lipid_molecules_dataframe <- function(data) { | |
| data_frame <- process_alignment_file(data) | |
| lipid_info <- data_frame[[1]] | |
| sample_info <- data_frame[[2]] | |
| lipidtable <- lipid_info[,colnames(lipid_info) %in% c("Metabolite name", sample_info$name)] %>% pivot_longer(cols = -(1)) %>% pivot_wider(names_from = `Metabolite name`,values_from = value) | |
| return(list(lipidtable,sample_info)) | |
| } | |
| ##' Updating select input with file upload | |
| ##' | |
| ##' @title Updating select input with file upload | |
| ##' @param data alignment file form MS-DIAL analysis | |
| ##' @return Expression data of lipid molecules and sample meta data | |
| ##' @examples | |
| ##' convert_msdial_export_to_lipid_molecules_dataframe(data) | |
| ##' @references | |
| ##' @author Takaki OKA | |
| ##' @export | |
| processAndUpdateInputs <- function(data, session, metadata, metainfocol) { | |
| shiny::updateSelectInput(session, "y", selected = paste(colnames(data)[c(metainfocol + 1)]), choices = colnames(data)[-c(1:metainfocol)]) | |
| shiny::updateSelectInput(session, "w", selected = "Class", choices = colnames(data)[c(2:metainfocol)]) | |
| shiny::updateSelectInput(session, "z", selected = "Class", choices = colnames(data)[c(2:metainfocol)]) | |
| } | |
| processAndUpdateInputs2 <- function(data, session, metadata, metainfocol) { | |
| #shiny::updateSelectInput(session, "y", selected = paste(colnames(data)[c(metainfocol + 1)]), choices = colnames(data)[-c(1:metainfocol)]) | |
| shiny::updateSelectInput(session, "X1", selected = paste(colnames(data)[c(metainfocol + 1)]), choices = colnames(data)[-c(1:metainfocol)]) | |
| shiny::updateSelectInput(session, "X2", selected = paste(colnames(data)[c(metainfocol + 1)]), choices = colnames(data)[-c(1:metainfocol)]) | |
| #shiny::updateSelectInput(session, "z", selected = "Class", choices = colnames(data)[c(2:metainfocol)]) | |
| } | |
| # update_select_input <- function(input,session) { | |
| # | |
| # | |
| # | |
| # } | |
| scale_rows <- function(x) { | |
| t(apply(x, 1, function(row) scales::rescale(row, to = c(-2, 2)))) | |
| } | |
| lipidmeancalforgroupnode <- function(data, metadata, selectclass) { | |
| Ontology_column <- 12 | |
| BatchID_row <- 2 | |
| peakinfo_column <- 1:35 | |
| header_row <- 5 | |
| processed_data <- process_alignment_file(data) | |
| lipid_data_classmean <- processed_data[[1]] | |
| sampleinfo <- processed_data[[2]] | |
| lipid_data_lipidclassmean <- pivot_longer(lipid_data_classmean, cols = -c(1:2)) %>% | |
| dplyr::select(`Metabolite name`, Ontology, name, value) %>% | |
| inner_join(metadata, by = "name") %>% | |
| dplyr::select(`Metabolite name`,Ontology ,selectclass, name, value) %>% | |
| group_by(`Metabolite name`, across(all_of(selectclass))) %>% | |
| mutate(mean = mean(value)) %>% | |
| ungroup() %>% | |
| distinct(`Metabolite name`,across(all_of(selectclass)), .keep_all = TRUE) %>% | |
| dplyr::select(`Metabolite name`, Ontology, selectclass, mean) %>% | |
| pivot_wider(names_from = selectclass, values_from = mean) | |
| return(lipid_data_lipidclassmean) | |
| } | |
| processSampleInRows <- function(originaldata, session, input) { | |
| colnames(originaldata) <- originaldata[1,] | |
| originaldata <- originaldata[-1,] | |
| originaldata[, -c(1:2)] <- apply(originaldata[, -c(1:2)], 2, as.numeric) | |
| lipidont <- read.csv(input$ontfile$datapath, check.names = FALSE) | |
| colnames(lipidont)[1] <- "lipid" | |
| colnames(originaldata)[1] <- "name" | |
| if (length(input$file2) != 0) { | |
| metadata <- read.csv(input$file2$datapath) | |
| colnames(metadata)[1] <- "name" | |
| data <- originaldata %>% | |
| pivot_longer(cols = -c(1:2), names_to = "lipid") %>% | |
| inner_join(lipidont, by = c("lipid")) %>% | |
| group_by(name, Ontology) %>% | |
| mutate(mean = mean(value)) %>% | |
| ungroup() %>% | |
| distinct(name, Ontology, .keep_all = TRUE) %>% | |
| dplyr::select(1, 2, 5, 6) %>% | |
| pivot_wider(names_from = "Ontology", values_from = "mean") | |
| data <- inner_join(metadata, data, by = c("name" = "name")) | |
| } else { | |
| metadata <- data.frame(name = originaldata[,1],Class = originaldata[,2]) | |
| data <- originaldata %>% | |
| pivot_longer(cols = -c(1:2), names_to = "lipid") %>% | |
| inner_join(lipidont, by = c("lipid")) %>% | |
| group_by(name, Ontology) %>% | |
| mutate(mean = mean(value)) %>% | |
| ungroup() %>% | |
| distinct(name, Ontology, .keep_all = TRUE) %>% | |
| dplyr::select(1, 5, 6) %>% | |
| pivot_wider(names_from = "Ontology", values_from = "mean") | |
| data <- inner_join(metadata, data, by = c("name" = "name")) | |
| } | |
| return(list(data,metadata)) | |
| } | |
| processMSDIALExport <- function(originaldata, session, input) { | |
| if (length(input$file2) != 0) { | |
| tablelist <- originaldata %>% convert_msdial_export_to_lipid_class_dataframe() | |
| data <- tablelist[[1]] | |
| metadata <- read.csv(input$file2$datapath) | |
| colnames(metadata)[1] <- "name" | |
| metadata <- inner_join(tablelist[[2]], metadata, by = c("name")) | |
| data <- inner_join(metadata, data, by = c("name" = "name")) | |
| metainfocol <- ncol(metadata) | |
| } else { | |
| tablelist <- originaldata %>% convert_msdial_export_to_lipid_class_dataframe() | |
| data <- tablelist[[1]] | |
| metadata <- tablelist[[2]] | |
| metainfocol <- ncol(metadata) | |
| data <- inner_join(metadata, data, by = c("name" = "name")) | |
| } | |
| return(list(data,metadata)) | |
| } | |
| processMSDIALExporttomoldata <- function(originaldata, session, input) { | |
| if (length(input$file2) != 0) { | |
| tablelist <- originaldata %>% convert_msdial_export_to_lipid_molecules_dataframe() | |
| data <- tablelist[[1]] | |
| metadata <- read.csv(input$file2$datapath) | |
| colnames(metadata)[1] <- "name" | |
| metadata <- inner_join(tablelist[[2]], metadata, by = c("name")) | |
| data <- inner_join(metadata, data, by = c("name" = "name")) | |
| metainfocol <- ncol(metadata) | |
| } else { | |
| tablelist <- originaldata %>% convert_msdial_export_to_lipid_molecules_dataframe() | |
| data <- tablelist[[1]] | |
| metadata <- tablelist[[2]] | |
| metainfocol <- ncol(metadata) | |
| data <- inner_join(metadata, data, by = c("name" = "name")) | |
| } | |
| return(list(data,metadata)) | |
| } | |
| processSampleInRowstomoldata <- function(originaldata, session, input) { | |
| moldata <- originaldata | |
| colnames(moldata) <- moldata[1,] | |
| moldata <- moldata[, !duplicated(colnames(moldata))] | |
| moldata <- moldata[-1,] | |
| moldata[,-c(1,2)] <- apply(moldata[,-c(1,2)],2,as.numeric) %>% data.frame() | |
| colnames(moldata)[1] <- "name" | |
| if (length(input$file2) != 0) { | |
| metadata <- read.csv(input$file2$datapath) | |
| colnames(metadata)[1] <- "name" | |
| data <- inner_join(metadata, moldata, by = c("name" = "name")) | |
| } else { | |
| metadata <- data.frame(name = originaldata[,1],Class = originaldata[,2]) | |
| data <- moldata | |
| } | |
| return(list(data,metadata)) | |
| } | |
| read_graph_json <- function(file_path) { | |
| tryCatch({ | |
| paste(readLines(file_path), collapse = "") | |
| }, error = function(e) { | |
| message("Error reading graph JSON file: ", e$message) | |
| return(NULL) | |
| }) | |
| } | |
| pvaluecheckbox =reactiveVal() | |
| pvaluecheckbox <<- "" |