我在使用mapply函数时遇到了问题。
基本上有一个响应向量"class“和一个预测矩阵"pred”。
class <-c(rep(1,5),rep(2,5))
pred <-matrix(c(rnorm(10), rnorm(10), rnorm(10)), ncol = 3)
我想要的是应用函数"llda“三次,每次使用来自预测矩阵的另一列。
职能:
library(MASS)
llda<-function(class, pred){
sum(predict(lda(class~pred))$class==class)/length(class)
}
适用结果应提供:
llda(class, pred[,1])
llda(class, pred[,2])
llda(class, pred[,3])
我把“类”和"pred“转换成列表。这样,"pred“的每个列向量就成为列表中的一个单独的项。
list(class)->class
split(pred, col(pred))->pred
当我现在尝试使用时,我会得到一个错误。
mapply(llda(class, pred), class = class, pred = pred)
然而,这是可行的:
llda(class[[1]],pred[[1]])
llda(class[[1]],pred[[2]])
llda(class[[1]],pred[[3]])
难道不应该这么做吗?获取每个列表的第一个元素并保存此列表。然后取第二个pred,因为类只有一个元素,所以这个元素被回收了。
我自己搞不清是怎么回事。任何帮助都是非常感谢的。
发布于 2015-07-23 07:52:51
mapply(llda, class = class, pred = pred)
会工作的。您只需要为mapply
提供要迭代的函数和对象列表。您所拥有的代码是不正确的,因为它将计算llda(class, pred)
,而它的返回本身并不是一个函数,因此mapply
将失败。
https://stackoverflow.com/questions/31594427
复制相似问题