--- a +++ b/R/utils-pipe.R @@ -0,0 +1,134 @@ +#' Pipe operator +#' +#' See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details. +#' +#' @name %>% +#' @rdname pipe +#' @keywords internal +#' @export +#' @importFrom magrittr %>% +#' @usage lhs \%>\% rhs +#' @param lhs A value or the magrittr placeholder. +#' @param rhs A function call using the magrittr semantics. +#' @return The result of calling `rhs(lhs)`. +NULL + +#' Assignment pipe +#' +#' See \code{magrittr::\link[magrittr:pipe]{\%<>\%}} for details. +#' +#' @name %<>% +#' @keywords internal +#' @export +#' @importFrom magrittr %<>% +#' @usage lhs \%<>\% rhs +#' @param lhs A value or the magrittr placeholder. +#' @param rhs A function call using the magrittr semantics. +#' @return The result of calling `rhs(lhs)`. +NULL + +# flag determined by the correlation table from one table or two tables +t_flag <- \(corr){ + if (!nrow(corr) == ncol(corr)) { + return(FALSE) + } + if (!all(rownames(corr) == colnames(corr))) { + return(FALSE) + } + return(TRUE) +} + +# 多列表是否一一对应 +# test 对应的列需要跟剩下的列具有唯一映射 +e_match <- function(df, test = NULL) { + dis_df <- dplyr::distinct_all(df) %>% as.data.frame() + if (is.null(test)) { + return(all_same(c(nrow(dis_df), apply(dis_df, 2, \(i)length(unique(i)))))) + } else { + return(all_same(c(nrow(dis_df), nrow(dplyr::distinct_all(dis_df[, test, drop = FALSE]))))) + } +} + +all_same <- \(x){ + return(all(x == x[1])) +} + +# choose the last not na value +condance <- \(aa){ + aa <- as.data.frame(aa) + if (any(is.na(aa[, length(aa)]))) { + res <- apply(aa, 1, \(x){ + tmp <- x[!is.na(x)] + if (length(tmp) == 0) { + return(NA) + } + return(tmp[length(tmp)]) + }) + } else { + res <- aa[, length(aa), drop = TRUE] + } + res +} + +# bind two df with same columns, the last df will replace first df +cbind_new <- \(df, df1){ + if (ncol(df) < 1) { + return(df1) + } + if (ncol(df1) < 1) { + return(df) + } + inter <- intersect(colnames(df1), colnames(df)) + la <- setdiff(colnames(df), inter) + cbind(df[, la, drop = FALSE], df1) +} + +twocol2vector <- \(df){ + if (ncol(df) < 2) { + return(NULL) + } + if (!e_match(df, test = 1)) { + stop("The columns are not one-to-one correspondence.") + } + df <- dplyr::distinct_all(df) + setNames(df[, 2], df[, 1]) +} + +custom_sort <- function(x) { + # 尝试将字符转换为数字并排序 + converted <- suppressWarnings(as.numeric(x)) + if (!any(is.na(converted))) { + # 如果转换成功,则返回按数字排序的结果 + return(converted[order(converted)]) + } else { + # 如果转换失败,则返回按字符排序的结果 + return(stringr::str_sort(x, numeric = TRUE)) + } +} + +paste_df <- function(df, collapse = ",") { + apply(df, 1, paste, collapse = collapse) +} + +paste_df2pielist <- function(df, collapse = ",") { + pcutils::strsplit2(df, split = collapse) %>% + pcutils::t2() %>% + as.list() %>% + lapply(function(x) as.numeric(x)) +} + +deprecated <- function(old, new) { + assign(old, new, envir = asNamespace(packageName())) +} + +#' @export c_net_cal +deprecated("c_net_cal", c_net_calculate) + +#' @export c_net_module +deprecated("c_net_module", module_detect) + +#' @export c_net_lay +deprecated("c_net_lay", c_net_layout) + +#' @export as.metanet +deprecated("as.metanet", c_net_update)