所以我试图循环一些数据并在我的代码中使用它们。我需要这个尝试的地方如下:
for (number in numbers) {
CTV_volume <- CTV[ which(CTV$Key==number), ]$volume
PTV_volume <- PTV[ which(PTV$Key==number), ]$volume
ITV_volume <- ITV[ which(ITV$Key==numbers), ]$volume
large_volume <- large_margin_vol_calc(radius_calc(CTV_volume), a_large, b_large)
small_volume <- small_margin_vol_calc(radius_calc(CTV_volume), a_small, b_small)
}
Run Code Online (Sandbox Code Playgroud)
问题是CTV_volume最后两行(large_volume和small_volume)中的计算取决于上面第一行(CTV_volume)中的数据。然而,对于循环的每次迭代,都有可能没有针对该特定键/数字的 CTV,而我需要使用另一个 CTV,即 ITV。但最重要的是,我需要它首先使用 CTV(如果存在),如果不存在,则使用 ITV 这个词。
在 R 中这是如何实现的?
如果您返回一个空向量,即numeric(0)从技术上讲这并不是一个错误。
所以如果你tryCatch()按如下所示使用,结果不会改变。
for (number in numbers) {
CTV_volume <- CTV[ which(CTV$Key==number), ]$volume
PTV_volume <- PTV[ which(PTV$Key==number), ]$volume
ITV_volume <- ITV[ which(ITV$Key==numbers), ]$volume
tryCatch({
large_volume <- large_margin_vol_calc(radius_calc(CTV_volume), a_large, b_large)
small_volume <- small_margin_vol_calc(radius_calc(CTV_volume), a_small, b_small)
},
error = function(e) {
#what should be done in case of exeption?
str(e) # prints structure of exeption
large_volume <- large_margin_vol_calc(radius_calc(ITV_volume), a_large, b_large)
small_volume <- small_margin_vol_calc(radius_calc(ITV_volume), a_small, b_small)
}
)
}
Run Code Online (Sandbox Code Playgroud)
相反,您可能想要做的是检查是否CTV_volume具有预期的长度。
for (number in numbers) {
CTV_volume <- CTV[ which(CTV$Key==number), ]$volume
PTV_volume <- PTV[ which(PTV$Key==number), ]$volume
ITV_volume <- ITV[ which(ITV$Key==numbers), ]$volume
if (length(CTV_volume) > 0) {
large_volume <- large_margin_vol_calc(radius_calc(CTV_volume), a_large, b_large)
small_volume <- small_margin_vol_calc(radius_calc(CTV_volume), a_small, b_small)
} else {
large_volume <- large_margin_vol_calc(radius_calc(ITV_volume), a_large, b_large)
small_volume <- small_margin_vol_calc(radius_calc(ITV_volume), a_small, b_small)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6129 次 |
| 最近记录: |