2013-03-14 98 views
0

我已经获得了预测器和data.frame的数据列表。我想要做的是使用这个预测器,并将它们的结果与一些聚合函数结合起来。我怎样才能做到这一点?多个函数结果的聚合

示例数据如下所示:

预测变量列表p1 .. pn。 (树在我的情况下)

每个预测变量返回两列:给定行的'分类概率'和'1 - 分类概率'。

我想总结每个预测器返回的“分类概率”,并将其与总结的“1 - 分类概率”进行比较。

的样本数据:

library('rpart'); 
size = 10; 
samplesize=100; 
mydata=data.frame(age=sample(10:40, samplesize, replace=TRUE), weight=rnorm(samplesize, mean = 60, sd = 20), girth=rnorm(samplesize, mean = 60, sd = 20)) 
mydata=cbind(mydata, dec=((mydata$weight > 40) | (mydata$girth > 60))) 
attributes = colnames(mydata)[1:length(colnames(mydata)) - 1] 


model <- list(); 
for(i in 1:size) { 
    attr = sample(1:length(attributes), sample(1:length(attributes))); 
    fmla <- as.formula(paste("dec ~ ", paste(attributes[attr], collapse= "+"))); 
    tree <- rpart(fmla, data=mydata, method="class", control=model$rc); 
    model[[i]] <- tree; 
} 

哪里模型预测和MYDATA的名单是实际数据。现在我可以预测有:

predict(model[[1]], mydata) 

替代

我不能达到这里主要的是聚合的功能的结果。在这里我可以给更简单的情况下,在那里我有功能:

f <- function (x, n) { 
    data.frame(first = x + n, second=x * n); 
} 

,并希望得到的结果列first的总和,并分别在second列(不globaly为每一行)值的总和以下电话:

f(1:4, 2) 
f(1:4, 3) 
.. 
f(1:4, n) 

回答

2

这可能是替代的解决方案:

f <- function (x, n) { 
    data.frame(first = x + n, second=x * n); 
} 

n <- 10 

l <- lapply(2:n, f, x = 1:4) 

### t(sapply(l, colSums)) 

Reduce('+', l) 
+0

是的,它看起来,当我适应的解决方案同样会解决我的第一个问题。谢谢:) – user364622 2013-03-14 19:29:45

+0

对不起......我没有注意到这个......结果仍然以错误的维度总结。我最后需要2x4矩阵而不是2xn。我已经解决了使用Reduce函数:“Reduce('+',l)” – user364622 2013-03-14 20:35:29

+0

OK,没有从这个问题中理解。将答案添加到答案中。感谢'Reduce'功能! – djhurio 2013-03-15 06:11:42