【发布时间】:2021-03-08 07:29:06
【问题描述】:
我确实有以下循环代码,它基本上只根据“RPK_cap”列是否高于外部给定的某个阈值来更新“衰减率”列(在场景 1 中为 1200 ,在场景 2 中为 1300 等)。如果是这样的话,我想通过将它乘以我的 0.9 来降低衰减率。这是针对 data.table 中的所有国家(列:iso)和年份(列:年份)完成的。当我使用场景 1 数据时,“RPK_cap”列将填充场景 1 数据,如果我选择场景 2,“RPK_cap”列将分别填充场景 2 数据。
我的问题如下: 此循环仅适用于场景 1。 如果我使用场景 2,我会收到错误消息: “如果 (price_el_int_aviation_RPK$RPK_Cap[price_el_int_aviation_RPK$iso == 时出错: 参数长度为零”
我确实尝试了很多,但我只是不知道问题出在哪里。有谁知道问题是什么? 这是数据表 data.table_example
if (scenario == "1") {
for (j in unique(price_el_int_aviation_RPK$iso)) {
for (i in unique(price_el_int_aviation_RPK$year[price_el_int_aviation_RPK$iso == j])) {
if (price_el_int_aviation_RPK$RPK_cap[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year == i] > 1200) {
price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] <- price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] * 0.90
}
}
}
} else if (scenario == "2"){
for (j in unique(price_el_int_aviation_RPK$iso)) {
for (i in unique(price_el_int_aviation_RPK$year[price_el_int_aviation_RPK$iso == j])) {
if (price_el_int_aviation_RPK$RPK_Cap[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year == i] > 1300) {
price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] <- price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] * 0.95
}
}
}
} else if (scenario == "3"){
for (j in unique(price_el_int_aviation_RPK$iso)) {
for (i in unique(price_el_int_aviation_RPK$year[price_el_int_aviation_RPK$iso == j])) {
if (price_el_int_aviation_RPK$RPK_Cap[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year == i] > 1400) {
price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] <- price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] * 0.95
}
}
}
} else if (scenario == "4"){
for (j in unique(price_el_int_aviation_RPK$iso)) {
for (i in unique(price_el_int_aviation_RPK$year[price_el_int_aviation_RPK$iso == j])) {
if (price_el_int_aviation_RPK$RPK_Cap[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year == i] > 1500) {
price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] <- price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] * 0.95
}
}
}
} else if (scenario == "5"){
for (j in unique(price_el_int_aviation_RPK$iso)) {
for (i in unique(price_el_int_aviation_RPK$year[price_el_int_aviation_RPK$iso == j])) {
if (price_el_int_aviation_RPK$RPK_Cap[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year == i] > 1600) {
price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] <- price_el_int_aviation_RPK$decay_rate[price_el_int_aviation_RPK$iso == j & price_el_int_aviation_RPK$year >= i] * 0.99
}
}
}
}else{}
【问题讨论】:
-
您的示例不可重现,也不是最小的。请阅读minimal reproducible example!
-
请阅读How to make a great R reproducible example? 了解minimal reproducible example 在R 中的样子。编写一个好问题需要大量工作,但值得。一方面,你更有可能得到一个好的答案。另一方面,当你做出这样的努力时,你会学到很好的调试技能。
-
为了澄清上述 cmets,将您的数据作为屏幕截图提供对我们没有帮助,因为我们无法使用屏幕截图在我们自己的系统上重现您的错误。您需要使用
dput(head(my data))之类的东西并将输出粘贴到您的问题中,以便我们可以复制该代码并运行您的循环。
标签: r loops for-loop if-statement data.table