RCOMMAND 命令

将 Analytics 表作为数据框架传递给一个外部 R 脚本,并且使用该外部 R 脚本的输出在 Analytics 项目中创建一个新表。

语法

RCOMMAND FIELDS 域 <...n> RSCRIPT 脚本路径 TO 表名称 <IF 测试> <WHILE 测试> <FIRST 范围|NEXT 范围> <KEEPTITLE> <SEPARATOR 字符> <QUALIFIER 字符> <OPEN>

参数

名称 描述
FIELDS 域名称 <...n>

要包括在发送给 R 脚本的数据帧中的源 Analytics 表中的域或表达式。

根据您所使用的 Analytics 版的不同,您可能在向 R 发送包含某些特殊字符的数据时遇到错误:

  • 非 Unicode "\"
  • Unicode "ÿ" 或 "Ŝ"
  • 两者框抽取块、黑格和竖杠等字符

说明

混合语言数据也不受支持,例如,同时包含日语字符和中文字符的表。

RSCRIPT 脚本路径

文件系统上的 R 脚本的完整或相对路径。 请将脚本路径放在引号中。

TO 表名

要将命令结果发送到的位置:

  • 表名将结果保存到一个 Analytics 表

    请将表名指定为具有 .FIL 文件扩展名的带引号的字符串。 例如:TO "Output.FIL"

    默认情况下,表数据文件 (.FIL) 被保存到包含 Analytics 项目的文件夹。

    请使用绝对或相对文件路径将该数据文件保存到另外的现有文件夹:

    • TO "C:\Output.FIL"
    • TO "Results\Output.FIL"

    说明

    表名称被限制为不超过 64 个字母数字字符(不包括 .FIL 扩展名)。 该名称可以包括下划线字符 ( _ ),但不能包括其他特殊字符或任何空格。 该名称不能以数字开头。

输出表是从 R 脚本返回的数据帧或矩阵创建的。

IF 测试

可选

要处理当前记录所必须满足的条件。 被传递给 R 脚本的数据帧仅包含那些满足该条件的记录。
WHILE 测试

可选

一个条件表达式,它必须为真以便处理每个记录。 该命令被一直执行到条件的计算结果为假或者到达表的末尾为止。

说明

如果您将 WHILE 与 FIRST 或 NEXT 结合使用,请在达到一个限制时立即记下处理步骤。

FIRST 范围 | NEXT 范围

可选

要处理的记录数:

  • FIRST 从第一个记录开始处理,直到达到指定的记录数为止
  • NEXT 从当前选定的记录开始处理,直到达到指定的记录数为止

请使用范围指定要处理的记录数。

如果您省略 FIRST 和 NEXT,则会默认处理所有记录。

注意

在运行 RCOMMAND 时,当前版本的 NEXT 存在一个已知的问题。 请避免使用此选项,否则记录索引可能重置到第一个记录,而无论选择了哪个记录。

KEEPTITLE

可选

将第一行数据视为域名称而非数据。 如果被省略,则使用通用域名称。

如果您想要在 R 脚本中使用列名称检索数据,则需要此选项。

SEPARATOR 字符

可选

要用作域之间的分隔符的字符。 您必须将该字符指定为带引号的字符串。

默认字符是一个逗号。

说明

请避免使用出现在输入域中的任何字符。 如果 SEPARATOR 字符出现在输入数据中,则结果可能受到影响。

QUALIFIER 字符

可选

要用作文本限定符以便环绕和标识域值的字符。 您必须将该字符指定为带引号的字符串。

默认字符是一个双引号。

说明

请避免使用出现在输入域中的任何字符。 如果 QUALIFIER 字符出现在输入数据中,则结果可能受到影响。

OPEN

可选

在命令执行后打开该命令创建的表。 仅当该命令创建输出表时有效。

示例

使 R 启动并运行 (Hello world)

您创建一个 hello world 脚本以测试 Analytics 和 R 之间的连接:

Analytics 命令

RCOMMAND FIELDS "Hello", ", world!" TO "r_result" RSCRIPT "C:\scripts\r_scripts\analysis.r"

R 脚本 (analysis.r)

srcTable<-acl.readData()

# 创建表并将其发送回 ACL
output<-data.frame(
  c(srcTable[1,1]),
  c(srcTable[1,2])
)

# 添加列名称并将该表发送回 ACL
colnames(output) <- c("Greeting","Subject")
acl.output<-output

使用行和列坐标访问域数据

您将一些发票域发送到一个 R 脚本以便在 Analytics 外部进行分析:

Analytics 命令

RCOMMAND FIELDS Department_Code Invoice_Amount Invoice_Date Invoice_Number Vendor_Number TO "r_result" RSCRIPT "C:\scripts\r_scripts\analysis.r"

R 脚本 (analysis.r)

# 从 R 脚本中数据帧的第二行检索发票编号
srcTable<-acl.readData()
srcTable[2,4]

使用列名称访问域数据

您将一些发票域发送到一个 R 脚本以便在 Analytics 外部进行分析。 您使用 KEEPTITLE 选项以便可以在 R 中按名称引用列:

Analytics 命令

RCOMMAND FIELDS Department_Code Invoice_Amount Invoice_Number TO "r_result" RSCRIPT "C:\scripts\r_scripts\analysis.r" KEEPTITLE

R 脚本 (analysis.r)

# 从 R 脚本中数据帧的第二行检索发票编号
srcTable<-acl.readData()
srcTable["2","Invoice_Number"]

将超过 1000.00 的发票记录发送到 R 脚本

您将一些发票域发送到一个 R 脚本以便在 Analytics 外部进行分析。 您使用 IF 限制被发送到 R 的记录。只有那些发票金额超过 1000.00 的记录被发送:

Analytics 命令

RCOMMAND FIELDS Department_Code Invoice_Amount Invoice_Number TO "r_result" IF Invoice_Amount > 1000.00 RSCRIPT "C:\scripts\r_scripts\analysis.r" KEEPTITLE

R 脚本 (analysis.r)

# 从 R 脚本中数据帧的第二行检索发票编号
srcTable<-acl.readData()
srcTable["2","Invoice_Number"]

发送发票记录并返回倍增的发票金额

您将一些发票域发送到一个 R 脚本以便在 Analytics 外部进行分析。 R 脚本针对命名列中的每个单元执行单个操作:

Analytics 命令

RCOMMAND FIELDS Department_Code Invoice_Amount Invoice_Number TO "r_result" RSCRIPT "C:\scripts\r_scripts\analysis.r" KEEPTITLE

R 脚本 (analysis.r)

# 返回 ACL 表的一部分并使其中的值翻倍
srcTable<-acl.readData()
acl.output<-srcTable["Invoice_Amount"] * 2

备注

说明

有关此命令工作原理的详细信息,请参见 Analytics 帮助

在 R 脚本中引用 Analytics 数据

Analytics 表被作为 R 数据框架传递给脚本。 数据框架是可能包含数据的不同模式或类型的表格式数据对象。

要在 R 脚本中使用由 Analytics 创建的数据框架,请调用 acl.readData() 函数并且在变量中存储所返回的数据框架:

# 在可以在整个脚本中引用的名为 myTable 的数据帧中存储该 Analytics 表
myTable<-acl.readData()

如需从数据框架中的单元格检索数据,请使用如下方法之一:

  • 使用行和列坐标:

    # 检索数据帧的第一行、第二列中的值
    myTable[1,2]

    说明

    坐标基于在命令中指定的域的顺序,而非当前打开的表布局或视图。

  • 使用行和列名称:

    # 检索该数据帧的第一行和“myColumnTitle”列中的值
    myTable["1","myColumnTitle"]

    您必须指定该命令的 KEEPTITLE 选项才能使用列名称。

    行被命名为“1”、“2”、“3”,并相应递增。 您也可以使用名称和坐标的组合。

将数据传回 Analytics

要将一个数据帧或数据矩阵返回至 Analytics 并创建一个新表,请使用以下语法:

# 将 myNewTable 数据帧返回至 Analytics 以创建一个新表 
acl.output<-myNewTable

说明

当 R 脚本终止时,您必须将数据帧或数据矩阵返回至 Analytics。 请确保该数据帧或数据矩阵中的列仅包含原子值,而不包含列表、矩阵、数组或非原子对象。 如果无法将这些值转换到 Analytics 数据类型,该命令会失败。

数据类型映射

Analytics 数据类型被使用 Analytics 项目和 R 脚本之间的转换流程转换为 R 数据类型:

Analytics 数据类型 R 数据类型
逻辑 逻辑
数值 数值
字符 字符
日期时间 日期,POSIXct,POSIXlt

性能和文件大小限制

对于大小超过 1 GB 的输入数据,运行您的 R 脚本以及处理返回数据所花费的时间会增加。 R 不支持大小不低于 2 GB 的输入文件。

被发送到 R 的记录数也会影响性能。 对于两个具有相同文件大小和不同记录数的表而言,处理包含较少记录的表时更快一些。

处理多字节字符数据

如果要在多字节字符集(例如,中文)中向 R 发送数据,则必须在 R 脚本中适当地设定系统区域设置。 要成功向 R 发送多字节数据表,则 R 脚本的第一行必须包含以下函数:

# 将区域设置设定为中文的示例
Sys.setlocale("LC_ALL","Chinese")

有关 Sys.setlocale( ) 的更多信息,请参阅 R 文档。

R 日志文件

Analytics 将 R 语言消息记录到项目文件夹中的 aclrlang.log 文件。 使用此日志文件可调试 R 错误。

提示

该日志文件位于 Analytics Exchange 解析作业的结果文件夹中。

在 AX 服务器上运行 R 脚本

如果您正在编写要在 AX 服务器上运行的分析应用程序并且想要使用外部 R 脚本,请:

  1. 将该文件作为相关文件与分析应用程序一同上传。
  2. 使用 FILE 解析标记标识文件。
  3. 使用相对路径 ./文件名.r 引用文件。

说明

使用相关文件可确保在用 Analytics Exchange 运行 R 时,TomEE 应用服务器账户具有足够的权限访问文件。