我试图在R.中的某些分类代码中使用外层函数和预测,为了方便起见,我们将在本文中假设我们有两个向量,分别为alpha和beta,分别包含0和1。我正在寻找一种简单而有效的方法来传递所有alpha< code >E29和E 110betaE 211到E 112预测E 213的所有组合。
我构造了下面的代码来模仿海量库中的lda函数,所以我使用的不是"lda",而是“分类器”。需要注意的是,中的预测方法依赖于(alpha,β)对。
当然,我可以使用嵌套的for循环来完成这个任务,但是我试图避免这种方法。
以下是我理想中想做的事情:
alpha <- seq(0, 1)
beta <- seq(0, 1)
classifier.out <- classifier(training.data, labels)
outer(X=alpha, Y=beta, FUN="predict", classifier.out, validation.data)这是一个问题,因为alpha和beta不是predict中的前两个参数。
所以,为了避开这个问题,我把最后一行改为
outer(X=alpha, Y=beta, FUN="predict", object=classifier.out, data=validation.data)请注意,我的验证数据有40个观察,还有4对可能的alpha和beta。虽然我说错了
dims [product 4] do not match the length of object [40]我尝试了一些其他的东西,其中一些是有效的,但远不是简单的。有什么建议吗?
发布于 2010-01-13 16:25:27
问题是,外部期望它的函数被向量化(也就是说,它将用它想要执行的所有参数的向量调用一次预测)。因此,当调用一次predict时,返回其结果(碰巧长度为4),外部抱怨是因为它不等于预期的40。
解决这一问题的一种方法是使用Vectorize。未经测试的代码:
outer(X=alpha, Y=beta, FUN=Vectorize(predict, vectorize.args=c("alpha", "beta")), object=classifier.out, data=validation.data)发布于 2010-01-13 06:24:31
我想出了一个不错的办法。下面是:
pairs <- expand.grid(alpha, beta)
names(pairs) <- c("alpha", "beta")
mapply(predict, pairs$alpha, pairs$beta,
MoreArgs=list(object=classifier.out, data=validation.data))有人有更简单更高效的东西吗?我很想知道,因为我在这个问题上花了太长时间。:(
https://stackoverflow.com/questions/2054772
复制相似问题