数据打印函数: 把基础数据元素类型的集合按 GNU R 的向量格式打印, 把 NumericTable 按带边框的表格打印。用于脚本调试时快速查看数据内容。
00 Remarks
向量打印({1,3,24,23,4,23}):
[1] 1 3 24 23 4 23
方括号之中是本行第一个元素的下标(与 GNU R 一致, 而不是元素个数); 超出 width(缺省 80 字符)时自动折行, 每行都带自己的起始下标 (与 R 一致地把下标标记整体右对齐, 即填充加在方括号之前):
[1] 1 2 3 ... 25
[26] 26 27 28 ... 40
元素类型的格式化规则(RFormat.ElementText()):
- / / / / / / : 整数文本, 右对齐;
- / : 按有效数字位数截断(缺省 7 位, 对应 R 的
options(digits=7)), 右对齐; NaN/Inf/-Inf 使用 R 的写法;
- : True/False, 右对齐;
- / : 带双引号的字面量, 左对齐;
- 枚举(Enum): ToString 之后当作字符串向量的成员打印(带双引号, 左对齐);
- Nothing 元素打印为 NA; 元素本身是集合时(例如 Double()())按 R 的
[[i]] 列表格式打印。
二维表打印(NumericTable): 表头是特征列名与标签列名, 首列是行名, 数值列右对齐, 渲染为 +---+ 边框表格。
在 VBS 脚本之中使用: 脚本里直接写 print(x) 即可(宿主会注入一个同名转发函数, 见 VBS\src\VBScript\Syntax\ScriptRefactor.vb)。之所以需要那个转发函数, 是因为在生成代码的 导入作用域之中 Print 这个名字已经被 Microsoft.VisualBasic.FileSystem 与 Microsoft.VisualBasic.CommandLine.CLITools 同时导出, VB 会直接报 BC30561 名称不明确, 因此必须由脚本所在 Module 本地声明一个同名成员来遮蔽它们。
以库的方式调用: Imports Microsoft.VisualBasic.Printing 之后即可使用 Print(data) / ToText(data)。
01 Syntax
02 Methods
03 Members
IEnumerable(Of ``0), TextWriter, Int32, Int32)把集合对象按 GNU R 的向量格式打印到 output(缺省为控制台)。
| Name | Description |
|---|---|
T | 集合的元素类型: |
| Name | Type | Description |
|---|---|---|
data | IEnumerable(Of ``0) | 集合(数组 / List / 任何 |
output | TextWriter | 输出设备, 缺省为控制台; 传入 |
width | Int32 | 每行最大字符数, 缺省 80; 传入非正数表示不折行 |
digits | Int32 | 浮点数的有效数字位数, 缺省 7 |
Dim x = {1, 3, 24, 23, 4, 23}
Call print(x)
' [1] 1 3 24 23 4 23
IEnumerable(Of ``0), Int32, Int32)把集合对象渲染为 GNU R 风格的向量文本(不打印)。
把数值二维表按带边框的表格打印到 output(缺省为控制台)。
| Name | Type | Description |
|---|---|---|
table | NumericTable | 数值二维表, 可以为 |
output | TextWriter | 输出设备, 缺省为控制台; 传入 |
digits | Int32 | 浮点数的有效数字位数, 缺省 7 |
Dim tbl = NumericTable.FromColumns({"x", "y"}, {{1, 2, 3}, {4, 5, 6}}, {"s1", "s2", "s3"})
Call print(tbl)
' +----+---+---+
' | | x | y |
' +----+---+---+
' | s1 | 1 | 4 |
' | s2 | 2 | 5 |
' | s3 | 3 | 6 |
' +----+---+---+
String, TextWriter)把字符串按 R 的标量形式打印(例如 [1] "done")。
该重载存在的意义是优先级: String 同时也是一个 IEnumerable(Of Char), 若没有这个精确匹配的重载, print("abc") 会被当作字符向量打印为 [1] "a" "b" "c"。
Object, TextWriter, Int32, Int32)打印任意值: 按运行时类型分派到二维表 / 集合 / 标量的打印格式。
脚本宿主注入的 print 转发函数就指向本重载: 脚本是一种动态场景(变量常常是 let 声明的 Object, 或者 New List(Of Double) 这类集合), 因此无法依赖编译期的重载解析, 只能在运行期判断。
| Name | Type | Description |
|---|---|---|
value | Object | 任意值: 二维表、集合、标量, 或者 |
output | TextWriter | 输出设备, 缺省为控制台 |
width | Int32 | 集合折行的每行最大字符数, 缺省 80; 非正数表示不折行 |
digits | Int32 | 浮点数的有效数字位数, 缺省 7 |
Int32)把数值二维表渲染为带边框的表格文本(不打印)。
String)把字符串按 R 的标量形式渲染(不打印), 例如 [1] "done"
Object, Int32, Int32)把任意值按运行时类型渲染为文本(不打印): 二维表 → 表格; 集合 → R 向量; 其它 → R 标量。
String, TextWriter)把渲染结果写出一行; output 为 Nothing 时写控制台