“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 <- replicate(30, turning.point.test(rnorm(20), alternative="two.sided")$tp)
和 MrFlick 一起赢!
哦,确实,这似乎更容易!非常感谢弗里克先生以上是关于“for”循环出现问题 - 关于长度的警告消息的主要内容,如果未能解决你的问题,请参考以下文章
JAVA警告 ‘for‘ loop replaceable with enhanced ‘for‘
JAVA警告 ‘for‘ loop replaceable with enhanced ‘for‘
JAVA警告 ‘for‘ loop replaceable with enhanced ‘for‘