9. 列数据函数与等式

9.1. 列公式

简介

列可以包含按需计算并产生结果值的公式。

语法

基本语法

公式始终以等号“=”开头。这表示表格单元格中的值是一个公式。

示例: =ABS($otherColumn + LOG(10.2))

公式返回值的类型必须与列类型匹配,或者可以轻松转换为列类型。例如,如果公式在字符串列中返回数值,则数值将转换为字符串。但是,如果公式在数值列中返回字符串值,则该字符串无法自动转换为数字,因此会导致显示错误。

对于布尔(或逻辑)列数据,所有数值都将被接受,其中非零值将被解释为 true,零被解释为 false。浮点值将按照 Excel(tm) INT 函数的规则进行转换。括号可用于分组和更改计算顺序。

函数

Cytoscape 提供了一组执行特定任务和计算的函数。函数的书写方式为:函数名称,后跟左括号“(”,然后是可选的逗号分隔参数列表,最后是右括号“)”。

示例: =MAX(10, 20)
示例: =IF($otherColumn, “UP”, “DOWN”)
示例: =NOW()

属性

属性是对与公式位于同一表格中的其他列的命名引用,其结果为同一节点、边或网络中该列单元格的值。

属性引用通过在美元符号 ($) 后放置列名来编写。

示例: $columnName

如果列名包含空格、特殊字符或命名空间标识符,则必须将名称置于花括号之间。

示例: ${column name with spaces}
示例: ${namespace::columnName}

诸如逗号之类的特殊字符必须用前导反斜杠进行转义。

示例: ${name with \, comma}

您可以提供一个默认值,该值将在列值为空白时使用。在列名后放置冒号 (:) 和默认值。

示例: ${columnName:0.0}

最后,列名区分大小写。

运算符

运算符写在两个操作数之间。

示例: =$x + 1

数值运算符: + 加法, - 减法, * 乘法, / 除法, ^ 幂运算

文本运算符: & 字符串拼接

逻辑运算符(对布尔值 true/false 进行操作): < 小于, > 大于, >= 大于等于, <= 小于等于, = 等于, <> 不等于

运算符优先级规则遵循标准算术规则。

字面值

字符串(文本)字面值位于双引号之间,例如: “abc”

数值字面值,例如: 123

浮点数字面值,例如: 123.45

布尔(逻辑)字面值: true, false

为了在字符串中嵌入双引号或反斜杠,必须使用前导反斜杠对其进行转义,因此字符串 “" 必须写成 “"\”

条件 IF

条件语句写为名为“IF”的函数,带有三个参数: IF(condition, a, b)。如果条件评估为真,则返回 a 参数的值,否则返回 b 参数的值。

示例: IF($x = $y, “equal”, “different”)

支持的函数

目前我们支持以下函数

Cytoscape 特有的网络函数

  • Degree – 节点的度,即连接到该节点的边数。

  • InDegree – 节点的入度。

  • IsDirected – 如果此边是有向的则返回 true,否则返回 false。

  • OutDegree – 节点的出度。

  • SourceID – 边的源节点 ID。

  • TargetID – 边的目标节点 ID。

数值函数

  • Abs – 返回数字的绝对值。

  • ACos – 返回数字的反余弦值。

  • ASin – 返回数字的反正弦值。

  • ATan2 – 返回两个数字 x 和 y 的反正切值。

  • Average – 返回一组数字的平均值。

  • Combin – 返回从 n 个对象中取 k 个对象的组合数。

  • Cos – 返回以弧度为单位的角的余弦值。

  • Cosh – 返回其参数的双曲余弦值。

  • Degrees – 将参数从弧度转换为度。

  • Exp – 返回 e 的指定次方。

  • GeoMean – 一组数字的几何平均值。

  • HarMean – 一组数字的调和平均值。

  • Ln – 返回数字的自然对数。

  • Log – 返回以指定底数的数字的对数。

  • Max – 返回一组数字的最大值。

  • Median – 返回数字列表的中位数。

  • Min – 返回一组数字的最小值。

  • Mod – 计算数字的模数。

  • Mode – 一组数字的众数。

  • NormDist – 返回正态分布的 PDF 或 CDF。

  • Permut – 返回给定对象数量的排列数。

  • Pi – 返回圆周率 p 的近似值。

  • Product – 返回给定数字的乘积。

  • Radians – 将参数从度转换为弧度。

  • Round – 将数字四舍五入到指定的小数位数。

  • Sign – 实现符号函数。根据数字是负数、零还是正数返回 -1、0 或 +1。

  • Sin – 返回以弧度为单位的角的正弦值。

  • Sinh – 返回其参数的双曲正弦值。

  • Sqrt – 计算数字的平方根。

  • StDev - 返回数字列表的样本标准差。

  • Sum – 返回其所有参数的总和。

  • Tan – 返回其以弧度为单位的参数的正切值。

  • Tanh – 返回其以弧度为单位的参数的双曲正切值。

  • Trunc – 截断数字。

  • Var – 样本方差。

文本函数

  • Concatenate – 连接两个或多个文本片段。

  • Left – 返回字符串的前缀。

  • Len – 返回字符串的长度。

  • Listtostring – 给定分隔符,将列表转换为字符串。

  • Lower – 将字符串转换为小写。

  • Mid – 选择某段文本的子字符串。

  • Right – 返回字符串的后缀。

  • Split – 根据分隔符的匹配项将文本字符串拆分为子字符串。返回字符串列表。

  • Substitute – 用其他文本替换部分文本。

  • Text – 使用 Java DecimalFormat 类的约定格式化数字。

  • Upper – 将字符串转换为大写。

  • Value – 将字符串转换为数字。

列表函数

  • Blist – 返回布尔值列表。

  • Count – 返回列表中数值的数量。

  • First – 返回列表中的第一个条目。

  • Flist – 返回浮点数列表。

  • Ilist – 返回整数列表。

  • Largest – 返回数字列表中的第 k 大元素。

  • Last – 返回列表中的最后一个条目。

  • Len – 返回字符串的长度(即字符串中的字符数)或列表的长度。

  • Nth – 返回列表中的第 n 个条目。

  • Slist – 返回字符串列表。

逻辑/布尔函数

  • And – 返回任意数量布尔值的逻辑与。

  • If – 根据布尔值返回两个选项之一。

  • Not – 返回布尔值的逻辑非。

  • Or – 返回任意数量布尔值的逻辑或。

日期/时间函数

  • Now – 返回当前日期和时间的字符串表示形式。

  • Today – 返回当前日期的字符串表示形式。

其他函数

  • Booleantablecell – 返回指定 SUID 列中的值。

  • Doubletablecell – 返回指定 SUID 列中的值。

  • Error – 在运行时抛出异常。

  • Integertablecell – 返回指定 SUID 列中的值。

  • Longtablecell – 返回指定 SUID 列中的值。

  • Stringtablecell – 返回指定 SUID 列中的值。

映射源节点和目标节点

默认情况下,Cytoscape 使用等式为边表(Edge Table)添加源节点和目标节点列。此映射在打开网络时自动发生,并且使用 shared name 列进行映射。但是,可以选择使用哪个节点表(Node Table)列,这是可定制的。

要更新映射,请转到 Apps → mapSourceAndTarget。可以选择多个节点表列进行映射,从而在边表中生成多组源节点和目标节点列。

要关闭自动映射,请转到 Edit → Properties → Cytoscape Preferences,然后从下拉菜单中选择 mapSourceAndTarget。将 autoMap 属性的值更改为 FALSE

下图显示了使用节点列 COMMON 进行的源节点和目标节点列映射。

9.2. 公式构建器

为了简化公式的创建并促进对内置函数的发现,我们在表格面板(Table Panel)中提供了公式构建器(Formula Builder)。点击 按钮即可打开公式构建器。

这应该会调出公式构建器,其外观如下所示:

顶部是一个名为公式编辑器(Formula Editor)的文本区域。公式文本可以直接输入到此区域中。文本区域的右上角有撤消重做按钮。

公式准备好后,点击插入公式(Insert Formula)按钮将其插入到表格中。根据组合框中的选择,公式可以仅插入到所选单元格、整列,或仅插入到当前选定的节点/边对应的单元格中。如果公式中存在语法错误,点击插入公式按钮时会立即报告。

通常,公式是按需重新计算的。例如,如果公式包含对另一列的属性引用,并且该列中的值发生变化,则公式会重新计算。这种重新计算有时会有缺点,例如对于非常大的网络,重新计算有时会很慢。您可以点击评估并插入结果(Evaluate and Insert Result)按钮,而不是直接插入公式本身。这将立即计算公式并将结果插入到所选单元格中。

公式编辑器下方是一个用于文档说明的区域。

  • 函数区域列出了所有可用函数。点击函数名称可查看关于该函数的作用及使用方法的文档。点击文档区域中的 insert 链接,即可在光标所在位置将函数插入到公式编辑器中。

  • 属性区域列出了当前表格中所有可从公式引用的可用列。点击文档区域中的 insert 链接,即可在光标所在位置将属性引用插入到公式编辑器中。

  • 语法区域提供了有关公式语法的文档。

9.3. 写给应用开发者的提示

添加自己的内置公式函数相对简单。一个简单的函数可能在 15 到 20 分钟内就能实现。然后可以通过解析器进行注册,并立即对用户可用。它将在公式构建器中显示。