【问题标题】:Symbolic Regression Prediction Issue: Error in FUN(X[[i]], ...) : object 'x' not found符号回归预测问题:FUN(X[[i]], ...) 中的错误:找不到对象“x”
【发布时间】:2018-03-25 04:22:01
【问题描述】:

我正在尝试在 R 中运行符号回归,并在训练和测试数据上使用 rgp 包中定义的 symbolicRegression 和 predict 函数。我的训练和测试数据都是具有相同列名的数据框。 symbolicRegression 函数可以正常工作并生成模型。但是当我尝试预测时,我得到了这个错误:

FUN(X[[i]], ...) 中的错误:找不到对象“AADAC”

这是我编写的代码。

formula_terms = paste(feature_names, collapse = "+")
form = paste(c(out_name, formula_terms), collapse = "~")
model = symbolicRegression(form, train)
prediction = predict(model, newdata = test)

最终的公式“形式”如下所示:

>form
[1] "ABCC12~AADAC+AAK1"

此外,“AADAC”肯定是“test”中的列名,所以我不确定为什么找不到它。

>test[,"AADAC"]
[1] -0.9473086 -0.3793400 -0.5190044 -0.5221080 -0.3917546 -0.4445167  5.1917181
[8] -0.3638217

我认为问题可能是我将“AADAC”仅视为列名而不是变量,所以我尝试了这个:

test$AADAC = test[,"AADAC"]

但这并没有解决问题。有谁知道为什么列名无法与数据框中的正确列匹配?任何建议将不胜感激。

为了重现性,这里是训练和测试数据的子集以及安装和加载 rgp 的命令:

if (!require(devtools)) {
    install.packages("devtools")
    library("devtools")
}
if (!require(rgp)){
    install_github("cran/rgp")
    library("rgp")
}
train = data.frame(c(-0.79541578, -0.57185906,  0.36521617),c( 1.02661507,  0.83108490, -0.61832129),c( -2.45419706,  2.89389899,  0.47570124))
test = data.frame(c( -0.09121212, -0.69295228, 0.26834160),c(-0.9473086, -0.3793400, -0.5190044),c( -0.13091150, 0.07954598, -0.21344385))
colnames(train) = c("ABCC12", "AADAC", "AAK1")
colnames(test) = c("ABCC12", "AADAC", "AAK1")
feature_names = c("AADAC", "AAK1")
out_name = "ABCC12"

【问题讨论】:

  • rgp 包?
  • rdocumentation.org/packages/rgp/versions/0.4-1。它曾经是 CRAN 存储库的一部分,但不再可从 CRAN 获得。据我所知,这是 R 中唯一可用于符号回归的包。
  • 如果您可以发布您的数据子集,以便此问题可重现,并且我们也可以在我们的机器上运行它,那么提供有用的建议会容易得多。谢谢:)
  • @mysteRious 谢谢。刚刚添加。
  • 我现在确实遇到了同样的错误,但是该软件包在 4 年前被其作者放弃,并且在软件包说明文件中列出的支持网站无处可寻。 traceback() 结果表明作者在他的函数中使用了with,这是一个臭名昭著的错误来源,因为对象名称是从列名称创建的,然后与它们的环境分离。

标签: r dataframe regression formula


【解决方案1】:

很抱歉复活了一个早已死去的话题,但我最近遇到了同样的问题,并且能够通过修改 Flasch 在主循环中使用的 predict() 函数调用来解决它。该解决方案主要涉及删除其中的 with() 子句。如果你仍然感兴趣(极不可能,但仍然)我可以告诉你如何。

【讨论】: