2013-03-14 143 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