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时,此代码有效。
predict(x,2)
但我想将k设置为范围1到长度(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 :(得分:0)
我绝对建议不要覆盖stats :: predict函数。
只需捎带你的Pythonic示例,在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循环的方法。