在R中做一个简单的功能

时间:2017-09-25 21:50:56

标签: r function

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)

1 个答案:

答案 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循环的方法。