【发布时间】:2019-02-21 21:49:21
【问题描述】:
我正在使用嵌套的 for 循环在 R 中创建一个贪心算法。
z = 0
for (j in 1:length(t))
for (i in 1:(length(t) - j))
if ((t[j + i] - t[j]) >= 30)
{z <- c(z,j + i - 1)
j <- j + i - 1
break}
z
其中 t 是一个向量,例如:
[1] 12.01485 26.94091 33.32458 49.46742 65.07425 76.05700
[7] 87.11043 100.64116 111.72977 125.72649 139.46460 153.67292
[13] 171.46393 184.54244 201.20850 214.05093 224.16196 237.12485
[19] 251.51753 258.45865 273.95466 285.42704 299.01869 312.35587
[25] 326.26289 339.78724 353.81854 363.15847 378.89307 390.66134
[31] 402.22007 412.86049 424.23181 438.50462 448.88005 462.59917
[37] 473.65289 487.20678 499.80053 509.14141 526.03873 540.17209
[43] 550.69941 565.74602 576.06882 589.07297 598.53208 614.20677
[49] 627.44605 648.08346 665.49614 681.46445 691.01806 704.05762
[55] 714.09172 732.04124 745.90960 758.52628 769.80519 779.41537
[61] 788.35732 805.78547 818.75262 832.71196 844.97859 856.08608
[67] 865.72998 875.55945 887.20862 900.00000
该函数的目标是找到差异尽可能接近30的索引并将它们保存在z中。
例如,在提供向量 t 的情况下,我希望 z 为 [0, 2, 4, 6, 8, 10,...70]
功能现在不是我关心的问题,因为我遇到了错误:
Error in if ((t[j + i] - t[j]) >= 30) { :
missing value where TRUE/FALSE needed
我是 R 新手,所以我知道我没有使用 R 众所周知的矢量化。我只是想让 'j' 和 'i' 作为“计数器变量”,我可以使用它们来访问向量 t 的特定元素,但由于我不知道的原因,if 语句没有产生 T/F 值。
有什么建议吗?
【问题讨论】:
-
发布一个独立的、可重现的示例。
-
R 中
:存在一个具体问题,即1:0是[1 0](不是空向量)。更普遍;尝试一个相当短的向量(如t)并使用cat(i,j,i+j,"\n")打印索引,同时查看发生了什么