diff --git a/NAMESPACE b/NAMESPACE index 28f35aa..82a8a32 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,6 +3,7 @@ export(annotateProteinInfoFromIndra) export(cytoscapeNetwork) export(cytoscapeNetworkOutput) +export(deleteEdgeFromNetwork) export(exportNetworkToHTML) export(filterSubnetworkByContext) export(getSubnetworkFromIndra) diff --git a/R/deleteEdgeFromNetwork.R b/R/deleteEdgeFromNetwork.R new file mode 100644 index 0000000..37b1a3d --- /dev/null +++ b/R/deleteEdgeFromNetwork.R @@ -0,0 +1,54 @@ +#' Delete an edge from a network edges data frame +#' +#' Removes the row(s) from an edges data frame that match the given +#' \code{source}, \code{target}, and \code{interaction} values. This is +#' the programmatic counterpart of the interactive Ctrl+click / right-click +#' edge deletion available in \code{\link{cytoscapeNetwork}}. +#' +#' @param edges Data frame with at minimum columns \code{source}, +#' \code{target}, and \code{interaction}. +#' @param source Character. The source node identifier of the edge to +#' remove. +#' @param target Character. The target node identifier of the edge to +#' remove. +#' @param interaction Character. The interaction type of the edge to remove. +#' +#' @return The \code{edges} data frame with the matching row(s) removed. +#' +#' @examples +#' edges <- data.frame( +#' source = c("TP53", "MDM2", "CDKN1A"), +#' target = c("MDM2", "TP53", "TP53"), +#' interaction = c("Activation", "Inhibition", "Activation"), +#' stringsAsFactors = FALSE +#' ) +#' deleteEdgeFromNetwork(edges, "MDM2", "TP53", "Inhibition") +#' +#' @export +deleteEdgeFromNetwork <- function(edges, source, target, interaction) { + if (!is.data.frame(edges)) { + stop("`edges` must be a data frame.") + } + if (!is.character(source) || length(source) != 1L || is.na(source)) { + stop("`source` must be a single, non-NA character value.") + } + if (!is.character(target) || length(target) != 1L || is.na(target)) { + stop("`target` must be a single, non-NA character value.") + } + if (!is.character(interaction) || length(interaction) != 1L || is.na(interaction)) { + stop("`interaction` must be a single, non-NA character value.") + } + required_cols <- c("source", "target", "interaction") + if (!all(required_cols %in% names(edges))) { + stop("`edges` must contain columns: source, target, interaction.") + } + match_row <- !is.na(edges$source) & + !is.na(edges$target) & + !is.na(edges$interaction) & + edges$source == source & + edges$target == target & + edges$interaction == interaction + keep <- !match_row + edges[keep, , drop = FALSE] +} + diff --git a/man/deleteEdgeFromNetwork.Rd b/man/deleteEdgeFromNetwork.Rd new file mode 100644 index 0000000..5e0720f --- /dev/null +++ b/man/deleteEdgeFromNetwork.Rd @@ -0,0 +1,39 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/deleteEdgeFromNetwork.R +\name{deleteEdgeFromNetwork} +\alias{deleteEdgeFromNetwork} +\title{Delete an edge from a network edges data frame} +\usage{ +deleteEdgeFromNetwork(edges, source, target, interaction) +} +\arguments{ +\item{edges}{Data frame with at minimum columns \code{source}, +\code{target}, and \code{interaction}.} + +\item{source}{Character. The source node identifier of the edge to +remove.} + +\item{target}{Character. The target node identifier of the edge to +remove.} + +\item{interaction}{Character. The interaction type of the edge to remove.} +} +\value{ +The \code{edges} data frame with the matching row(s) removed. +} +\description{ +Removes the row(s) from an edges data frame that match the given +\code{source}, \code{target}, and \code{interaction} values. This is +the programmatic counterpart of the interactive Ctrl+click / right-click +edge deletion available in \code{\link{cytoscapeNetwork}}. +} +\examples{ +edges <- data.frame( + source = c("TP53", "MDM2", "CDKN1A"), + target = c("MDM2", "TP53", "TP53"), + interaction = c("Activation", "Inhibition", "Activation"), + stringsAsFactors = FALSE +) +deleteEdgeFromNetwork(edges, "MDM2", "TP53", "Inhibition") + +}