如何在R中加载一个库,以便使用bert toolkit从Excel调用它?

如何在R中加载一个库,以便使用bert toolkit从Excel调用它?,r,excel,mgcv,bert-toolkit,R,Excel,Mgcv,Bert Toolkit,Bert toolkit是一个很好的从Excel调用R函数的包。见: 我使用bert工具包从Excel VBA中调用R中包装器函数中的fitted neuralnet(avNNnet fitted with Caret)。这个运行得很好。这是在bert toolkit的包装函数中加载模型的代码: load("D:/my_model_avNNet.rda") neuraln <- function(x1,x2,x3){ xx <- data.frame(x1,

Bert toolkit是一个很好的从Excel调用R函数的包。见:

我使用bert工具包从Excel VBA中调用R中包装器函数中的fitted neuralnet(avNNnet fitted with Caret)。这个运行得很好。这是在bert toolkit的包装函数中加载模型的代码:

    load("D:/my_model_avNNet.rda")

    neuraln <- function(x1,x2,x3){
    xx <- data.frame(x1,x2,x3)
    z <- predict(my_model_avNNET, xx)
    z
}
library(mgcv)
load("D:/gam_y_model.rda")

testfunction <- function(k1,k2){
  z <- predict(gam_y, data.frame(x = k1, x2 = k2))
  print (z)
}
load(“D:/my\u model\u avNNet.rda”)
neuralnR的一个特征是,用户调用相同的命名方法,如
predict
,但在内部运行不同的变量,如
predict.lm
predict.glm
,或
predict.gam
,具体取决于传入的模型对象。因此,在avNNet模型上调用
predict
与在gam模型上调用
predict
不同。类似地,正如函数因输入而改变一样,输出也会改变

根据MSDN文件,有关Excel错误的披露如下:

#VALUE
是Excel的说法,“公式的键入方式有问题,或者引用的单元格有问题。”

从根本上说,在看不到实际结果的情况下,Excel可能无法解释或转换为Excel范围或VBA类型。R从gam模型返回的结果,特别是当您描述R时,不会产生错误

例如,根据,标准的predict.lm的返回值为:

predict.lm
生成预测向量或预测矩阵

但是,根据,predict.gam的返回值有点细微差别:

如果
type==“lpmatrix”
则返回一个矩阵,当应用于模型系数向量时,该矩阵将给出所提供协变量值处的线性预测值向量(减去任何offest)。否则,如果
se.fit
TRUE
,则返回2项列表,其中包含包含预测和相关标准误差估计的项目(两个数组)
fit
se.fit
,否则返回预测数组。返回数组的维数取决于
类型
是否为
“项”
:如果是,则数组为二维,每个项在线性预测器中分开,否则数组为一维,并包含线性预测器/预测值(或相应的s.e.s.)。逐项返回的线性预测值不包括偏移量或截距

总的来说,考虑调整你的<代码>预测< /代码>调用,以给出易于Excel解释的数值向量,而不是Excel无法呈现的矩阵/数组或一些其他高维R类型:

testfunction <- function(k1,k2){
  z <- mgcv::predict.gam(gam_y, data.frame(x = k1, x2 = k2), type=="response")
  return(z)
}

testfunction <- function(k1,k2){
  z <- mgcv::predict.gam(gam_y, data.frame(x = k1, x2 = k2), type=="lpmatrix")
  return(z)
}

testfunction <- function(k1,k2){
  z <- mgcv::predict.gam(gam_y, data.frame(x = k1, x2 = k2), type=="linked")
  return(z$fit)   # NOTICE fit ELEMENT USED
}
...

testfunction您是否尝试过从mgcv显式调用predict.gam函数?在你的例子中:
z@FM Kerckhof谢谢你,好主意!我只是尝试了一下,尽管结果仍然是一样的(错误2015)。我想知道@user2165379:为什么在GAM的情况下,而不是在avNNnet的情况下,需要对预测进行
print()
调用?我从R markdown的工作中看到,print()调用有时会导致意外的结果。@fm kerckhof首先我在没有print()的情况下使用了它。函数在R和Bert中不起作用。在R中,该功能可用于打印。它也可以在Bert控制台中工作。谢谢。
return(z)
?@Parfait非常感谢您的详尽回答!!问题的原因确实是predict.glm的返回对象(z)。这是一个“命名号码”。我添加了z真棒!很高兴听到这个消息,也很高兴能帮忙!再次感谢!我对这个解决方案和全面的解释感到非常高兴!啊哈!:-)你是说乌普沃廷?我没有意识到我可以!(我以为赏金是自动颁发的)
testfunction <- function(k1,k2){
  z <- mgcv::predict.gam(gam_y, data.frame(x = k1, x2 = k2), type=="response")
  return(z)
}

testfunction <- function(k1,k2){
  z <- mgcv::predict.gam(gam_y, data.frame(x = k1, x2 = k2), type=="lpmatrix")
  return(z)
}

testfunction <- function(k1,k2){
  z <- mgcv::predict.gam(gam_y, data.frame(x = k1, x2 = k2), type=="linked")
  return(z$fit)   # NOTICE fit ELEMENT USED
}
...