nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.Runtime / RFormat

RFormat

Full name Microsoft.VisualBasic.Printing.RFormat Assembly Microsoft.VisualBasic.Runtime Members 19

GNU R 风格的文本格式化内核: 把集合对象/二维表渲染为 R 的 print() 观感文本。

00 Remarks

本模块只负责"把数据变成字符串", 控制台写出与公开 API 由 Print 提供。 之所以独立成一个模块, 是因为运行期(vbs run.vb)与工程期(vbs make-project)、 以及脚本动态分派的入口都需要复用同一套渲染规则。

与 GNU R 的对应关系:

  • 向量 [1] 1 3 24 — print(c(1,3,24))
  • 折行 + 续行下标 [9] ... — print(1:100)(options(width=80))
  • 7 位有效数字 — options(digits=7) 下的 format()
  • 字符串/枚举带双引号且左对齐 — character 向量
  • 嵌套集合 [[1]] — list 打印
  • 缺失值 NA、空对象 NULL、numeric(0) — 同 R 的约定

刻意保留的差异:

  • 逻辑值打印为 True/False(沿用 .NET 的 语义),

而不是 R 的 TRUE/FALSE;

  • 折行按"当前行还能放得下几个元素"贪心填充, 而不是 R 的"先定列数再整列换行",

两者在等宽数值向量的情况下结果完全一致;

  • 二维表沿用框架既有的 (带 +---+ 边框),

而不是 R 的无边框对齐表格。

01 Syntax

Microsoft.VisualBasic.Printing.RFormat

02 Methods

NameOverloadsSummary
ElementText 1 把集合之中的一个元素渲染为 R 风格的标量文本。
ScalarText 1 把单个标量渲染为 R 的 print(42) 形式: [1] 42。
NumericText 1 把一个浮点值渲染为 R 的 format() 风格文本。
Quote 1 给字符串加上 R 风格的双引号(内部的双引号转义为 \")
IsTextElement 1 元素是否属于"字符串向量"的成员(字符/字符串/枚举)。 这类元素在 R 之中左对齐, 其余(数值与逻辑值)右对齐。
RTypeName 1 空集合在 R 之中按元素类型打印, 例如 numeric(0) / character(0) / logical(0)。
VectorText 1 把一个集合渲染为 R 风格向量文本(必要时按 width 折行)。
WrapVector 1 按 R 的规则折行: 每行以 [本行起始下标] 开头, 下标右对齐到最大下标的宽度。
IndexPrefix 1 R 风格的行首下标标记, 例如当前行从第 9 个元素开始时为 [9]。
IndexPrefixLength 1 [下标] 标记自身的字符数(左右方括号、一个空格, 以及右对齐所需的填充)
AlignTokens 1 把元素文本对齐到统一的列宽: 字符串向量左对齐, 数值向量右对齐
IsNestedCollection 1 集合之中的元素本身也是集合(例如 Double()())
ListText 1 R 的 list 打印格式: 每个成员带 [[i]] 标题, 成员之间以空行分隔。
TableText 1 把一个 NumericTable 渲染为带边框的表格文本。
HeadersOrDefault 1 列名缺失或者长度与矩阵宽度不一致时, 生成 V1..Vn 这样的占位列名

03 Fields

NameOverloadsSummary
DefaultWidth 1 每行的最大字符数, 对应 R 的 options(width=) 缺省值 80。 传入非正数表示不折行。
DefaultDigits 1 浮点数的有效数字位数, 对应 R 的 options(digits=) 缺省值 7。
NA 1 缺失值(集合之中的 Nothing 元素), 与 R 的 NA 对应
NULL 1 空对象(例如 Nothing 的二维表), 与 R 的 NULL 对应

04 Members

method ElementText #
ElementText(Object, Int32)

把集合之中的一个元素渲染为 R 风格的标量文本。

Remarks

各类型的基本数据类型(Int32 / Byte / Single / Double / Boolean / String / Char / Int16 / Int64 / UInt32 / UInt64 / Decimal)以及枚举都被覆盖; 枚举按照约定先 ToString 再当作字符串向量的 成员打印; 其余类型退化为 Object。

Parameters
NameTypeDescription
valueObject

元素值, 可以为 Nothing(渲染为 NA)

digitsInt32

浮点数的有效数字位数

method ScalarText #
ScalarText(Object, Int32)

把单个标量渲染为 R 的 print(42) 形式: [1] 42。

Parameters
NameTypeDescription
valueObject

标量值; Nothing 渲染为 NULL

digitsInt32

浮点数的有效数字位数

method NumericText #
NumericText(Double, Int32)

把一个浮点值渲染为 R 的 format() 风格文本。

Remarks
  1. NaN / Inf / -Inf 使用 R 的写法而不是 .NET 的

NaN / ∞(并且与当前区域设置无关);

  1. Single 会先拓宽到 Double 再按有效位截断,

因此 1.1F 打印为 1.1 而不是 1.100000023841858;

  1. .NET 的 G 格式输出大写指数(1.234568E+07), 这里统一改成 R 的小写 e。
Parameters
NameTypeDescription
valueDouble

浮点值

digitsInt32

有效数字位数

method Quote #
Quote(String)

给字符串加上 R 风格的双引号(内部的双引号转义为 \")

method IsTextElement #
IsTextElement(Object)

元素是否属于"字符串向量"的成员(字符/字符串/枚举)。 这类元素在 R 之中左对齐, 其余(数值与逻辑值)右对齐。

method RTypeName #
RTypeName(Type)

空集合在 R 之中按元素类型打印, 例如 numeric(0) / character(0) / logical(0)。

Parameters
NameTypeDescription
elementTypeType

集合的元素类型; 未知(动态类型集合)时传 Nothing

method VectorText #
VectorText(IEnumerable(Of Object), Type, Int32, Int32)

把一个集合渲染为 R 风格向量文本(必要时按 width 折行)。

Parameters
NameTypeDescription
dataIEnumerable(Of Object)

集合元素(已经统一为 Object, 因此可以承载动态类型的集合)

elementTypeType

集合的静态元素类型, 仅用于空集合的 numeric(0) 之类的类型名; 未知时传 Nothing

widthInt32

每行最大字符数, 非正数表示不折行

digitsInt32

浮点数的有效数字位数

method WrapVector #
WrapVector(String(), Int32)

按 R 的规则折行: 每行以 [本行起始下标] 开头, 下标右对齐到最大下标的宽度。

Remarks

以 {1,3,24,23,4,23} 为例, 输出正是 R 的 [1] 1 3 24 23 4 23(下标 [1] 表示本行第一个元素的下标 1)。

Parameters
NameTypeDescription
tokensString()

已对齐到统一列宽的元素文本

widthInt32

每行最大字符数, 非正数表示不折行

method IndexPrefix #
IndexPrefix(Int32, Int32)

R 风格的行首下标标记, 例如当前行从第 9 个元素开始时为 [9]。

Remarks

与 R 一致地把填充加在方括号之前(而不是把数字在方括号之内右对齐): 40 个元素的向量首行是 [1]、次行是 [26]。

method IndexPrefixLength #
IndexPrefixLength(Int32)

[下标] 标记自身的字符数(左右方括号、一个空格, 以及右对齐所需的填充)

method AlignTokens #
AlignTokens(String(), Boolean)

把元素文本对齐到统一的列宽: 字符串向量左对齐, 数值向量右对齐

method IsNestedCollection #
IsNestedCollection(Object())

集合之中的元素本身也是集合(例如 Double()())

method ListText #
ListText(Object(), Int32, Int32)

R 的 list 打印格式: 每个成员带 [[i]] 标题, 成员之间以空行分隔。

method TableText #
TableText(NumericTable, Int32)

把一个 NumericTable 渲染为带边框的表格文本。

Remarks

表头由特征列名(NumericTable.featureNames)与标签列名(NumericTable.labelNames) 组成, 首列是行名(NumericTable.rowNames, 缺失时自动生成 1..n); 列名缺失或长度不匹配时按 R 的习惯生成 V1..Vn / L1..Lk 占位列名。 行名一列左对齐, 数值列右对齐。

Parameters
NameTypeDescription
tableNumericTable

二维表, 可以为 Nothing(渲染为 NULL)

digitsInt32

浮点数的有效数字位数

method HeadersOrDefault #
HeadersOrDefault(String(), Int32, String)

列名缺失或者长度与矩阵宽度不一致时, 生成 V1..Vn 这样的占位列名

field DefaultWidth #
DefaultWidth

每行的最大字符数, 对应 R 的 options(width=) 缺省值 80。 传入非正数表示不折行。

field DefaultDigits #
DefaultDigits

浮点数的有效数字位数, 对应 R 的 options(digits=) 缺省值 7。

field NA #
NA

缺失值(集合之中的 Nothing 元素), 与 R 的 NA 对应

field NULL #
NULL

空对象(例如 Nothing 的二维表), 与 R 的 NULL 对应