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

Posted

技术标签:

【中文标题】“for”循环出现问题 - 关于长度的警告消息【英文标题】:Having an issue with "for" loop - warning message about length 【发布时间】:2017-02-27 20:07:15 【问题描述】:

所以基本上,我正在尝试多次运行随机性转折点测试以获得转折点样本(比如 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**

【问题讨论】:

只需调用turning.point.test() 即可查看返回的内容。如果它不仅仅是一个数字,您将无法将其存储为 TP.test 向量的一个元素。实际上,如果您只需要提取 pval,则从您的 TP.test[i] 中取出 [i] 应该可以解决问题。 它返回一个测试,所以我认为它不仅仅是一个数字。此外,当我只运行第一个命令来生成随机值时,会出现完全相同的错误消息。 啊,是的,我应该看到的!也取出那里的[i],因为您正在为Zn 创建20 个随机值,而不仅仅是一个。 ...所以澄清一下,取出所有 [i] 除了 sample.P[i] 中的内容 哦哇!!!!它完美地工作!输入 sample.P 时,它给了我一个包含 30 个转折点的向量。这就是我想要的,现在我可以模拟 50 个值,甚至 100 个。 【参考方案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

【讨论】:

甚至:sample.P &lt;- replicate(30, turning.point.test(rnorm(20), alternative="two.sided")$tp) 和 MrFlick 一起赢! 哦,确实,这似乎更容易!非常感谢弗里克先生

以上是关于“for”循环出现问题 - 关于长度的警告消息的主要内容,如果未能解决你的问题,请参考以下文章

PHP 警告:POST 内容长度超出限制

JAVA警告 ‘for‘ loop replaceable with enhanced ‘for‘

JAVA警告 ‘for‘ loop replaceable with enhanced ‘for‘

JAVA警告 ‘for‘ loop replaceable with enhanced ‘for‘

使用“长度”的头文件的 For 循环中出现错误 C867 [重复]

无法为 for 循环中具有 null 属性的内容创建正确的 if 语句