2017-09-25 38 views
0
x<-sample(0:1,20,TRUE) 

predict <- function(x,k){ 
    n <- length(x) 
    k2 <- k/2 
    pred<-vector(length=n-k) 
    csx<-c(0,cumsum(x)) 
    for (i in 1:(n-k)){ 
    pred[i] <-ifelse(csx[i+k]-csx[i] >= k2,1,0) 
    } 
    return(mean(abs(pred-x[(k+1):n]))) 
} 

這個代碼在我輸入單個數字到k時有效。在R中做一個簡單的功能

predict(x,2) 

但我想將k設置爲範圍1到length(x)/ 2,在這種情況下爲1:10。 並使其成爲一個功能。所以,當我只是簡單地鍵入predict(x,k),結果將是predict(x,1) predict(x,2), .. predict(x,length(x)/2)

我該怎麼做?


我比較習慣到Python,所以我嘗試添加這最後一行,沒有工作

for (i in range(1:length(x)/2)) predict(x,i) 

回答

0

我肯定會建議不要覆蓋統計::預測功能。

只是捎帶了你的Python的例子,在R您可以鍵入:

z <- numeric() # create empty vector to store results 
for (i in 1:(length(x)/2)) {z <- c(z,predict(x, i))} 
print(z) # print results to console 

如果你想換行到函數會是這個樣子。

my_prediction <- function(x){ 
    z <- numeric() 
    for (i in 1:(length(x)/2)) {z <- c(z,predict(x, i))} 
    return(z) 
} 

print(my_prediction(x)) 

如果你想提高性能,你將不得不找出一個方法來做到這一點,而無需for循環。

+0

謝謝你的回答。我可以看到你的答案是有效的,但是我可以通過這種方式作爲一種功能嗎? –