【问题标题】:R in SQL Server: $ operator is invalid for atomic vectorsSQL Server 中的 R:$ 运算符对原子向量无效
【发布时间】:2017-02-13 14:45:30
【问题描述】:

我正在尝试将我的一些工作 R 脚本移植到 SQL Server。我有以下 R 代码:

titanic <- read.csv(titanicUri, header = TRUE)
titanic <- titanic[complete.cases(titanic),]
titanic$AgeGroup <- cut(titanic$Age, c(0,13,100), labels=c("Young","Old"))

我在 SQL Server 中创建了一个表并导入了数据。当我尝试像这样实现“剪切”功能时:

EXECUTE sp_execute_external_script    
      @language = N'R'    
    , @script = N' 
        titanic <- InputDataSet;
        titanic <- titanic[complete.cases(titanic),];
        titanic$AgeGroup <- cut(titanic$Age, c(0,13,100), labels=c("Young","Old"));
        titanic <- data.frame(titanic);
        OutputDataSet <- titanic;
        '    
    , @input_data_1 = N' SELECT Name FROM Titanic;'    
    WITH RESULT SETS (([PassengerName] varchar(Max)));

我收到此错误(complete.cases 工作正常)

titanic$Age 中的错误:$ 运算符对原子向量无效

Msg 39004,第 16 层,第 20 州,第 11 行
执行“sp_execute_external_script”期间出现“R”脚本错误,HRESULT 为 0x80004004。

消息 39019,第 16 层,状态 1,第 11 行
发生外部脚本错误:titanic$Age 中的错误:$ 运算符对原子向量无效调用: source -> withVisible -> eval -> eval -> cut

ScaleR 中的错​​误。检查输出以获取更多信息。错误 eval(expr,envir,enclos):ScaleR 中的错​​误。检查输出 更多信息。调用:source -> withVisible -> eval -> eval -> .调用执行停止

消息 11536,第 16 级,状态 1,第 11 行
EXECUTE 语句失败,因为它的 WITH RESULT SETS 子句指定了 1 结果集,但语句在运行时只发送了 0 个结果集 时间。

提前致谢

【问题讨论】:

  • InputDataSet 是否只包含一列?如果是这样,那么您的问题可能是当您说titanic[complete.cases(titanic),] 尝试:titanic[complete.cases(titanic), , drop = FALSE] 时,它已从 data.frame 转换为向量
  • 如果我的猜测是正确的,这与您使用 SQL Server 的事实没有任何关系,只是 read.csv(titanicUri, header = TRUE) 返回一个包含多列的 data.frame,而 @ 987654327@ 有一列(我猜)。 R 对这两种情况的处理方式不同,这有点令人费解。
  • 确实,@TimGoodman,OP 只在输入数据集SELECT 查询中选择一列。

标签: sql-server r


【解决方案1】:

作为@TimGoodman cmets,由于指定的SELECT 查询,您的输入数据集是一列。只需展开列列表以使 Age 可用:

@input_data_1 = N'SELECT * FROM Titanic;'

也考虑指定输出数据集。查看有用的mssqltips.com guide

@output_data_1_name = N'titanic'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 2014-05-15
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多