Sql server R:如何正确创建rx_forest_模型对象?

Sql server R:如何正确创建rx_forest_模型对象?,sql-server,r,microsoft-r,Sql Server,R,Microsoft R,我正在尝试使用R和SQL Server 2016进行客户流失分析。 我已经将我的数据集上传到本地SQL Server中的数据库中,并对该数据集进行了所有的准备工作。 现在我有了这个函数trainModel(),我将使用它来估计我的随机模型林: trainModel = function(sqlSettings, trainTable) { sqlConnString = sqlSettings$connString trainDataSQL <- RxSqlServerData(conn

我正在尝试使用R和SQL Server 2016进行客户流失分析。 我已经将我的数据集上传到本地SQL Server中的数据库中,并对该数据集进行了所有的准备工作。 现在我有了这个函数
trainModel()
,我将使用它来估计我的随机模型林:

trainModel = function(sqlSettings, trainTable) {
sqlConnString = sqlSettings$connString

trainDataSQL <- RxSqlServerData(connectionString = sqlConnString,
                                table = trainTable,
                                colInfo = cdrColInfo)

## Create training formula
labelVar = "churn"
trainVars <- rxGetVarNames(trainDataSQL)
trainVars <- trainVars[!trainVars %in% c(labelVar)]
temp <- paste(c(labelVar, paste(trainVars, collapse = "+")), collapse = "~")
formula <- as.formula(temp)

## Train gradient tree boosting with mxFastTree on SQL data source
library(RevoScaleR)
rx_forest_model <- rxDForest(formula = formula,
                             data = trainDataSQL,
                             nTree = 8,
                             maxDepth = 16,
                             mTry = 2,
                             minBucket = 1,
                             replace = TRUE,
                             importance = TRUE,
                             seed = 8,
                             parms = list(loss = c(0, 4, 1, 0)))

return(rx_forest_model)
}
对于此警告消息,函数
trainModel()
不会创建对象
rx\u forest\u model


有人对如何解决这个问题有什么建议吗?

经过几次尝试,我找到了函数
trainModel()
不能正常工作的原因。 不是连接字符串问题,甚至不是数据源类型问题。 问题在于函数
trainModel()
的语法

从函数体中删除以下语句就足够了:

return(rx_forest_model)
这样,函数返回相同的警告消息,但以正确的方式创建对象
rx\u forest\u model

因此,正确的功能是:

trainModel = function(sqlSettings, trainTable) {
sqlConnString = sqlSettings$connString

trainDataSQL <- RxSqlServerData(connectionString = sqlConnString,
                            table = trainTable,
                            colInfo = cdrColInfo)

## Create training formula
labelVar = "churn"
trainVars <- rxGetVarNames(trainDataSQL)
trainVars <- trainVars[!trainVars %in% c(labelVar)]
temp <- paste(c(labelVar, paste(trainVars, collapse = "+")), collapse = "~")
formula <- as.formula(temp)

## Train gradient tree boosting with mxFastTree on SQL data source
library(RevoScaleR)
rx_forest_model <- rxDForest(formula = formula,
                             data = trainDataSQL,
                             nTree = 8,
                             maxDepth = 16,
                             mTry = 2,
                             minBucket = 1,
                             replace = TRUE,
                             importance = TRUE,
                             seed = 8,
                             parms = list(loss = c(0, 4, 1, 0)))

}
trainModel=功能(sqlSettings,trainTable){
sqlConnString=sqlSettings$connString

trainDataSQL您的新函数与旧函数基本相同。您运行它时是否删除了对
system.time
的调用?@HongOoi如果您比较这两个函数并阅读我的响应,您可以看到这两个函数之间的差异。我没有删除语句system.time()我删除了return()删除返回没有任何作用删除返回(rx_forest_model)函数会创建对象rx_forest_model。如果输入函数返回(rx_forest_model),函数会正常工作,但不会创建对象!它不会打印对象。提示:尝试将函数的结果指定给某个对象。
trainModel = function(sqlSettings, trainTable) {
sqlConnString = sqlSettings$connString

trainDataSQL <- RxSqlServerData(connectionString = sqlConnString,
                            table = trainTable,
                            colInfo = cdrColInfo)

## Create training formula
labelVar = "churn"
trainVars <- rxGetVarNames(trainDataSQL)
trainVars <- trainVars[!trainVars %in% c(labelVar)]
temp <- paste(c(labelVar, paste(trainVars, collapse = "+")), collapse = "~")
formula <- as.formula(temp)

## Train gradient tree boosting with mxFastTree on SQL data source
library(RevoScaleR)
rx_forest_model <- rxDForest(formula = formula,
                             data = trainDataSQL,
                             nTree = 8,
                             maxDepth = 16,
                             mTry = 2,
                             minBucket = 1,
                             replace = TRUE,
                             importance = TRUE,
                             seed = 8,
                             parms = list(loss = c(0, 4, 1, 0)))

}