R函数错误,"没有适用的方法来预测'应用于类的对象" NULL"

时间:2018-01-16 21:07:17

标签: r

我正在尝试使用一个函数来生成一系列KS测试的p值。在我的例子中,我希望从我的aaa数据集中选择不同的第一个M [i]行,并在几个步骤过程之后生成预测glm回归值dd,最后比较每两个数据集以获得KS测试sp值。但是我的代码并没有很好地运作。我使用模拟数据在下面附加了我的代码:

set.seed(1)
aaa <- matrix(runif(8000*950), 8000, 950)
ph = sample(rep(0:1,l=950))
kst <- function(M){
  N = length(M)
  aa = list()
  bb = list()
  cc = list()
  dd = list()
  ee = list()
  p = 0
  for (i in 2:N){
    aa[[i]] = aaa[1:M[i],] ## class(aaa) is matrix 
    bb[[i]] = rbind(ph, aa[[i]])
    cc[[i]] = as.data.frame(t(bb[[i]]))
    dd[[i]] = glm(data = cc[[i]], formula = ph~., family = binomial)
    ee[[i]] = ks.test(predict(dd[[i-1]]), predict(dd[[i]]))
    p[i] = ee[[i]]$p.value
  }
  return(p)
}
kst(M = seq(50,950,by=50))

但R说:

> kst(M = seq(50,950,by=50))
Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "NULL"

我认为我的ks.test循环也有错误,但我不知道如何修复它。 有人可以帮我这个吗?提前致谢。

1 个答案:

答案 0 :(得分:1)

问题可能在for (i in 1:N-1)

R将1:N-1解释为序列1到N,然后从整个向量中减去1。 试试1:5-1看看我的意思。

尝试for (i in 1:(N-1))

也在这一行

 ee[[i]] = ks.test(predict(dd[[i]]), predict(dd[[i+1]])) ## this line may also have problem.

dd[[i+1]]尚未定义,因为您的循环仅将dd填充到i

不确定这是你想要做的但是可能:

  if(i>1L)ee[[i]] = ks.test(predict(dd[[i-1]]), predict(dd[[i]]))

这样,在您填写dd的第一个条目后,您就开始测试当前dd与之前的processData: false, contentType: false