GNU R 风格的文本格式化内核: 把集合对象/二维表渲染为 R 的 print() 观感文本。
RFormat
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
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| 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
| Name | Overloads | Summary |
|---|---|---|
| DefaultWidth | 1 | 每行的最大字符数, 对应 R 的 options(width=) 缺省值 80。 传入非正数表示不折行。 |
| DefaultDigits | 1 | 浮点数的有效数字位数, 对应 R 的 options(digits=) 缺省值 7。 |
| NA | 1 | 缺失值(集合之中的 Nothing 元素), 与 R 的 NA 对应 |
| NULL | 1 | 空对象(例如 Nothing 的二维表), 与 R 的 NULL 对应 |
04 Members
Object, Int32)把集合之中的一个元素渲染为 R 风格的标量文本。
各类型的基本数据类型(Int32 / Byte / Single / Double / Boolean / String / Char / Int16 / Int64 / UInt32 / UInt64 / Decimal)以及枚举都被覆盖; 枚举按照约定先 ToString 再当作字符串向量的 成员打印; 其余类型退化为 Object。
| Name | Type | Description |
|---|---|---|
value | Object | 元素值, 可以为 |
digits | Int32 | 浮点数的有效数字位数 |
Object, Int32)把单个标量渲染为 R 的 print(42) 形式: [1] 42。
| Name | Type | Description |
|---|---|---|
value | Object | 标量值; |
digits | Int32 | 浮点数的有效数字位数 |
Double, Int32)把一个浮点值渲染为 R 的 format() 风格文本。
NaN/Inf/-Inf使用 R 的写法而不是 .NET 的
NaN / ∞(并且与当前区域设置无关);
Single会先拓宽到Double再按有效位截断,
因此 1.1F 打印为 1.1 而不是 1.100000023841858;
- .NET 的
G格式输出大写指数(1.234568E+07), 这里统一改成 R 的小写e。
| Name | Type | Description |
|---|---|---|
value | Double | 浮点值 |
digits | Int32 | 有效数字位数 |
String)给字符串加上 R 风格的双引号(内部的双引号转义为 \")
Object)元素是否属于"字符串向量"的成员(字符/字符串/枚举)。 这类元素在 R 之中左对齐, 其余(数值与逻辑值)右对齐。
Type)空集合在 R 之中按元素类型打印, 例如 numeric(0) / character(0) / logical(0)。
| Name | Type | Description |
|---|---|---|
elementType | Type | 集合的元素类型; 未知(动态类型集合)时传 |
IEnumerable(Of Object), Type, Int32, Int32)把一个集合渲染为 R 风格向量文本(必要时按 width 折行)。
| Name | Type | Description |
|---|---|---|
data | IEnumerable(Of Object) | 集合元素(已经统一为 |
elementType | Type | 集合的静态元素类型, 仅用于空集合的 |
width | Int32 | 每行最大字符数, 非正数表示不折行 |
digits | Int32 | 浮点数的有效数字位数 |
String(), Int32)按 R 的规则折行: 每行以 [本行起始下标] 开头, 下标右对齐到最大下标的宽度。
以 {1,3,24,23,4,23} 为例, 输出正是 R 的 [1] 1 3 24 23 4 23(下标 [1] 表示本行第一个元素的下标 1)。
| Name | Type | Description |
|---|---|---|
tokens | String() | 已对齐到统一列宽的元素文本 |
width | Int32 | 每行最大字符数, 非正数表示不折行 |
Int32, Int32)R 风格的行首下标标记, 例如当前行从第 9 个元素开始时为 [9]。
与 R 一致地把填充加在方括号之前(而不是把数字在方括号之内右对齐): 40 个元素的向量首行是 [1]、次行是 [26]。
Int32)[下标] 标记自身的字符数(左右方括号、一个空格, 以及右对齐所需的填充)
String(), Boolean)把元素文本对齐到统一的列宽: 字符串向量左对齐, 数值向量右对齐
Object())集合之中的元素本身也是集合(例如 Double()())
Object(), Int32, Int32)R 的 list 打印格式: 每个成员带 [[i]] 标题, 成员之间以空行分隔。
Int32)把一个 NumericTable 渲染为带边框的表格文本。
表头由特征列名(NumericTable.featureNames)与标签列名(NumericTable.labelNames) 组成, 首列是行名(NumericTable.rowNames, 缺失时自动生成 1..n); 列名缺失或长度不匹配时按 R 的习惯生成 V1..Vn / L1..Lk 占位列名。 行名一列左对齐, 数值列右对齐。
| Name | Type | Description |
|---|---|---|
table | NumericTable | 二维表, 可以为 |
digits | Int32 | 浮点数的有效数字位数 |
String(), Int32, String)列名缺失或者长度与矩阵宽度不一致时, 生成 V1..Vn 这样的占位列名
每行的最大字符数, 对应 R 的 options(width=) 缺省值 80。 传入非正数表示不折行。
浮点数的有效数字位数, 对应 R 的 options(digits=) 缺省值 7。
缺失值(集合之中的 Nothing 元素), 与 R 的 NA 对应
空对象(例如 Nothing 的二维表), 与 R 的 NULL 对应