mutate_impl(.data,dots)中出错:尝试在SQL Server上使用零长度变量名R-Services

mutate_impl(.data,dots)中出错:尝试在SQL Server上使用零长度变量名R-Services,r,sql-server,R,Sql Server,我正在SQL Server上使用R服务。下面是我的代码示例,其中我使用R计算列的最大值: EXECUTE sp_execute_external_script @language = N'R' , @script = N' r = order(InputDataSet$Id) InputDataSet = InputDataSet[r,] library(dplyr) OutputDataSet <- Input

我正在SQL Server上使用R服务。下面是我的代码示例,其中我使用R计算列的最大值:

EXECUTE sp_execute_external_script @language = N'R' 
    , @script = N'
        r = order(InputDataSet$Id)
        InputDataSet = InputDataSet[r,]

        library(dplyr)

        OutputDataSet <- InputDataSet %>% group_by(Id) %>% mutate(
                                                   Max_Col1 = max(Col1, na.rm = TRUE),
                                                   Max_Col2 = max(Col2, na.rm = TRUE),
                                                   Max_Col3 = max(Col3, na.rm = TRUE),) %>%  slice(1)
          '
    , @input_data_1 = N'SELECT * FROM table_name;'
当我在RStudio上执行相同的代码时,它运行得很好,但在SQL Server上出现错误。我不明白这个错误是怎么回事

我的SQL Server上的
R版本
是:3.2.2(消防安全)
SQL Server上的packageVersion(“dplyr”):0.4.3

问题将基于该列的
类。如果它不是
数字
,请转换为
数字
,它应该可以工作

OutputDataSet <- InputDataSet %>%
                    group_by(Id) %>%
                    mutate(
                       Max_Col1 = max(as.numeric(as.character(Col1)), na.rm = TRUE),
                       Max_Col2 = max(as.numeric(as.character(Col2)), na.rm = TRUE),
                       Max_Col3 = max(as.numeric(as.character(Col3)), na.rm = TRUE),) %>%  
              slice(1)

我在末尾看到了一个
Max\u Col3=Max(Col3,na.rm=TRUE),
,尽管它可以工作。这个错误似乎是基于兼容性。这些版本的一部分。当前
CRAN
版本的
dplyr
r3.6.2
@akrun上的
0.8.3
。我将尝试在SQL Server上升级R的版本,看看它是如何运行的。请检查您运行的Rstudio dplyr版本是否与SQL中的版本相同server@akrun我在Rstudio上使用了3.6版本的R,但是现在我把它改成了3.2.2,我得到了同样的错误@akrun这起作用了,我不敢相信这是个错误:)如果我有这样的
%%>%变异(Col4=Col1[c(4)])
为什么会有问题?@KrushikaTapedia这不应该是个问题,因为你选择的是第四个“Col1”观测值,应该循环使用。但是,我不确定旧版本的
dplyr
的行为如何。可能您可以
rep
licate,即
%%>%变异(Col4=rep(Col1[4],n())
谢谢,我想这是关于拥有正确类型的类的问题
OutputDataSet <- InputDataSet %>%
                    group_by(Id) %>%
                    mutate(
                       Max_Col1 = max(as.numeric(as.character(Col1)), na.rm = TRUE),
                       Max_Col2 = max(as.numeric(as.character(Col2)), na.rm = TRUE),
                       Max_Col3 = max(as.numeric(as.character(Col3)), na.rm = TRUE),) %>%  
              slice(1)
 InputDataSet %>%
         type.convert(as.is = TRUE) %>% # should change the type 
          group_by(Id) %>%
          mutate_at(vars(starts_with("Col")), list(Max = ~ max(., na.rm = TRUE))) %>%
          slice(1)