麻烦问题

时间:2015-07-23 15:41:01

标签: r

使用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只有一个元素,所以这是循环使用的。

我无法弄清楚自己出了什么问题。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

mapply(llda, class = class, pred = pred)会奏效。您只需要给mapply函数和对象列表迭代。您拥有的代码不正确,因为它将评估llda(class, pred),并且返回该代码本身不是函数,因此mapply将失败。