使用mapply函数时遇到问题。
基本上有一个响应向量“类”和预测矩阵“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)
}
结果mapply将提供:
llda(class, pred[,1])
llda(class, pred[,2])
llda(class, pred[,3])
我将“class”和“pred”转换为列表。因此,“pred”的每个列向量成为列表中的单独项。
list(class)->class
split(pred, col(pred))->pred
当我现在尝试使用mapply时,我收到错误。
mapply(llda(class, pred), class = class, pred = pred)
然而,这是有效的:
llda(class[[1]],pred[[1]])
llda(class[[1]],pred[[2]])
llda(class[[1]],pred[[3]])
不应该做同样的事吗?取每个列表的第一个元素并保存。然后选择pred的第二个,因为class只有一个元素,所以这是循环使用的。
我无法弄清楚自己出了什么问题。任何帮助表示赞赏。
答案 0 :(得分:1)
mapply(llda, class = class, pred = pred)
会奏效。您只需要给mapply
函数和对象列表迭代。您拥有的代码不正确,因为它将评估llda(class, pred)
,并且返回该代码本身不是函数,因此mapply
将失败。