【发布时间】:2016-12-22 05:09:19
【问题描述】:
我正在对拟合进行预测,类似于插入符指南中的内容:
predictions <- predict(caretfit, testing, type = "prob")
但我得到了错误:
Error in apply(x, 1, paste, collapse = ",") :
dim(X) must have a positive length
我想知道 1) 诊断这些错误的一般方法,这些错误是由于错误输入此类函数或 2) 我的代码失败的原因。
1) 所以看错误与'X'有关。哪个参数是 x?显然是'apply'中的第一个,但是predict中的哪个参数最终被传递给apply?查看 traceback():
10: stop("dim(X) must have a positive length")
9: apply(x, 1, paste, collapse = ",")
8: paste(apply(x, 1, paste, collapse = ","), collapse = "\n")
7: makeDataFile(x = newdata, y = NULL)
6: predict.C5.0(modelFit, newdata, type = "prob")
5: predict(modelFit, newdata, type = "prob") at C5.0.R#59
4: method$prob(modelFit = modelFit, newdata = newdata, submodels = param)
3: probFunction(method = object$modelInfo, modelFit = object$finalModel,
newdata = newdata, preProc = object$preProcess)
2: predict.train(caretfit, testing, type = "prob")
1: predict(caretfit, testing, type = "prob")
现在,如果我能够遵循代码并理解问题而不是这些一般错误,那么这个问题将很容易解决。我可以使用此回溯到 C5.0.R#59 处的代码来跟踪代码。 (看起来没有办法在每条跟踪上获取行号?)我可以按照这段代码一直到第 59 行,然后(我认为)第 44 行的预测函数:
但在此之后,我不确定逻辑流向何处。我在插入符号源中的任何地方都看不到“makeDataFile”,或者,如果它在另一个包中,它是如何到达那里的。我还尝试过 Rstudio 调试、debug() 和 browser()。没有提供我期望从其他语言获得的堆栈跟踪。当您不知道错误消息的含义时,有关如何遵循代码的任何建议?
2) 至于我的特定输入,“caretfit”只是插入符拟合的结果,测试数据是 300 万行 x 59 列:
fitcontrol <- trainControl(method = "repeatedcv",
number = 10,
repeats = 1,
classProbs = TRUE,
summaryFunction = custom.summary,
allowParallel = TRUE)
fml <- as.formula(paste("OUTVAR ~",paste(colnames(training[,1:(ncol(training)-2)]),collapse="+")))
caretfit <- train(fml,
data = training[1:200000,],
method = "C5.0",
trControl = fitcontrol,
verbose = FALSE,
na.action = na.pass)
【问题讨论】:
-
你在使用 RStudio 吗?
-
我正在使用 nvim-r 和 vim。但我愿意使用 RStudio 进行调试。实际上我一直在尝试使用 RStudio 进行调试,问题是当我尝试单步执行我的代码时,它要么 1)进入一个似乎永远不会完成的步骤 2)没有某个特定文件的来源,我得到一个大意的错误(抱歉不记得错误)
-
如果你提供一个可重现的例子,我可以看看它......
-
由于数据的私密性,提供 MWE 很棘手,但我会看看我能做些什么。
-
只需运行您的代码并删除您想要保密或(似乎)无关紧要的内容。最后,获取MCVE 的过程有时会导致解决方案......