updateNodeAttributes: Update node attributes

View source: R/RCX-NodeEdgeNetworkAttributes.R

updateNodeAttributesR Documentation

Update node attributes

Description

This functions add node attributes in the form of a NodeAttributes object to an RCX or an other NodeAttributes object.

Usage

updateNodeAttributes(
  x,
  nodeAttributes,
  replace = TRUE,
  stopOnDuplicates = FALSE,
  ...
)

## S3 method for class 'NodeAttributesAspect'
updateNodeAttributes(
  x,
  nodeAttributes,
  replace = TRUE,
  stopOnDuplicates = FALSE,
  ...
)

## S3 method for class 'RCX'
updateNodeAttributes(
  x,
  nodeAttributes,
  replace = TRUE,
  stopOnDuplicates = FALSE,
  checkReferences = TRUE,
  ...
)

Arguments

x

RCX or NodeAttributes object; (to which the new node attributes will be added)

nodeAttributes

NodeAttributes object; (the new aspect, that will be added)

replace

logical; if existing values are updated (or ignored)

stopOnDuplicates

logical; whether to stop, if duplicates in propertyOf and name (and subnetworkId if present) columns are found

...

additional parameters

checkReferences

logical; whether to check if references to other aspects are present in the RCX object

Details

Nodes may have additional attributes besides a name and a representation, and are represented as NodeAttributes objects. NodeAttributes objects can be added to an RCX object or an other NodeAttributes object. The propertyOf parameter references the node IDs to which the attributes belong to. When adding an NodeAttributes object to an RCX object, those IDs must be present in the Nodes aspect, otherwise an error is raised.

In the case, that a NodeAttributes object is added to an other, or the RCX object already contains a NodeAttributes object, some attributes might be present in both. By default, the attributes are updated with the values of the latest one. This can prevented setting the replace parameter to FALSE, in that case only new attributes are added and the existing attributes remain untouched.

Furthermore, if duplicated attributes are considered as a preventable mistake, an error can be raised by setting stopOnDuplicates to TRUE. This forces the function to stop and raise an error, if duplicated attributes are present.

Value

NodeAttributes or RCX object with added node attributes

See Also

EdgeAttributes, NetworkAttributes

Examples

## For NodeAttributesAspects: 
## prepare some aspects:
nodeAttributes1 = createNodeAttributes(
  propertyOf=c(1,1,1,1),
  name=c("A","A","B","B"),
  value=list(c("a1","a2"),
             "a with subnetwork",
             "b",
             "b with subnetwork"),
  isList=c(TRUE,FALSE,TRUE,FALSE),
  subnetworkId=c(NA,1,NA,1)
)

## A is updated, C is new 
nodeAttributes2 = createNodeAttributes(
  propertyOf=c(1,1,1),
  name=c("A","A","C"),
  value=list("new a",
             "new a with subnetwork",
             c(1,2)),
  subnetworkId=c(NA,1,NA)
)

## Simply update with new values
nodeAttributes3 = updateNodeAttributes(nodeAttributes1, nodeAttributes2)

## Ignore already present keys
nodeAttributes4 = updateNodeAttributes(nodeAttributes1, nodeAttributes2, 
                                       replace=FALSE)

## Raise an error if duplicate keys are present
try(updateNodeAttributes(nodeAttributes1, nodeAttributes2, 
                         stopOnDuplicates=TRUE))
## =>ERROR: 
## Elements of "propertyOf", "name" and "subnetworkId" (in addNodeAttributes)
## must not contain duplicates!

## For RCX
## prepare RCX object:
nodes = createNodes(name = c("a","b","c","d","e","f"))
edges = createEdges(source=c(1,2,0,0,0,2), 
                    target=c(2,3,1,2,5,4))
rcx = createRCX(nodes, edges)
cySubNetworks = createCySubNetworks(
  id = c(1,2),
  nodes = list("all", c(1,2,3)),
  edges = list("all", c(0,2))                    
)
rcx = updateCySubNetworks(rcx, cySubNetworks)

## add the node attributes, even if no subnetworks are present
rcx = updateNodeAttributes(rcx, nodeAttributes1, checkReferences=FALSE)

## add the node attributes
rcx = updateNodeAttributes(rcx, nodeAttributes1)

## add additional node attributes and update existing
rcx = updateNodeAttributes(rcx, nodeAttributes2)

## create node attributes for a not existing node...
nodeAttributes3 = createNodeAttributes(propertyOf=9, 
                                       name="A", 
                                       value="a")
## ...and try to add them
try(updateNodeAttributes(rcx, nodeAttributes3))
## =>ERROR: 
## Provided IDs of "additionalAttributes$propertyOf" (in addNodeAttributes)
## don't exist in "rcx$nodes$id"

frankkramer-lab/RCX documentation built on Feb. 4, 2023, 5:12 p.m.