遇到“for”循环问题 - 关于长度的警告消息

时间:2017-02-27 20:07:15

标签: r for-loop

所以基本上,我试图多次运行随机性转折点测试以获得转折点样本(比如说30)。在此之前,我从正态分布(0,1)运行大小为20的随机样本。 我需要运行30次以获得30个TP。

我可以手工完成,30次。但是,使用for循环更方便,更方便,但我真的不知道从那里去哪里..

turning.point.test()函数需要安装包randtests

这是我的代码,显然不太好。

sample.P=numeric(30)
for (i in 1:30) {
  Zn[i]<-rnorm(20) #Generating random samples of size 20 from N(0,1)
  TP.test[i]<-turning.point.test(Zn, alternative="two.sided")
  sample.P[i]<-TP.test$tp[i] #extract the TP value from the test
}

所以它不起作用,为什么?我在互联网上搜索了一个答案,但它从未与我的问题有关。我无法将其应用于我的代码。

错误消息:

There were 50 or more warnings (use warnings() to see the first 50)
**number of items to replace is not a multiple of replacement length**

1 个答案:

答案 0 :(得分:1)

在几个位置,正在创建的内容不仅仅包含一个元素,当您执行类似于asdf[i]的赋值语句时,R期望看到它,这表示单个元素。由于最后需要的是TP值的向量,因此循环中的其他量可以在每次迭代时更改,而不会影响结果。所以,这样的事情,你应该很高兴:

sample.P=numeric(30)
for (i in 1:30) {
  Zn<-rnorm(20) #Generating random samples of size 20 from N(0,1)
  TP.test<-turning.point.test(Zn, alternative="two.sided")
  sample.P[i]<-TP.test$tp #extract the TP value from the test
}

甚至

sample.P=numeric(30)
for (i in 1:30) {
  sample.P[i]<-turning.point.test(rnorm(20), alternative="two.sided")$tp
}