mutate_impl(.data,dots)中出错:尝试在SQL Server上使用零长度变量名R-Services
我正在SQL Server上使用R服务。下面是我的代码示例,其中我使用R计算列的最大值: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
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)