我正在使用嵌套数据方法来应用审查数据模型以在1275个数据流(约225,000个观测值)中传输清晰数据。我已经成功地使用group_by
将数据集分为三个层次级别(HUC4,主要分水岭和溪流…以为国家,州,县)。我想采用这种方法,因为它似乎比我一直在使用的for循环方法快得多且易于阅读。但是,当我将模型映射到嵌套数据框时,出现错误:NA/NaN/Inf in foreign function call
。这非常令人困惑,因为当我将其应用于大中型group_by数据帧时,该方法可以很好地工作。这也是奇怪的,因为三个group_by数据帧的每一个中的列表元素都是相同的(只是分组在不同的级别)。数据庞大且笨拙,但是我可以尝试给出一些有关结构的线索。
起始数据如下:
> summary(tb_cens)
huc4 loc_major_basin sys_loc_code sample_date y m
Length:203631 Min. : 4010101 Length:203631 Min. :1998-04-06 Min. :1998 Min. : 1.000
Class :character 1st Qu.: 7010207 Class :character 1st Qu.:2006-05-27 1st Qu.:2006 1st Qu.: 5.000
Mode :character Median : 7020011 Mode :character Median :2009-09-10 Median :2009 Median : 7.000
Mean : 7193116 Mean :2009-10-29 Mean :2009 Mean : 6.676
3rd Qu.: 7040004 3rd Qu.:2013-08-28 3rd Qu.:2013 3rd Qu.: 8.000
Max. :10230003 Max. :2018-10-23 Max. :2018 Max. :12.000
d doy combined_stube_conv100_conv60 detection_limit record_length censored1
Min. : 1.00 Min. : 1.0 Min. : 0.00 TRUE : 80189 Min. :10.00 Mode :logical
1st Qu.: 9.00 1st Qu.:143.0 1st Qu.: 26.00 FALSE:123442 1st Qu.:12.00 FALSE:159845
Median :16.00 Median :184.0 Median : 58.57 Median :14.00 TRUE :43786
Mean :16.02 Mean :187.8 Mean : 53.29 Mean :14.48
3rd Qu.:24.00 3rd Qu.:233.0 3rd Qu.: 72.00 3rd Qu.:17.00
Max. :31.00 Max. :365.0 Max. :100.00 Max. :26.00
censored2
Mode :logical
FALSE:167033
TRUE :36598
在我的情况下,命令是
##### create the model function
cens_model <- function(tb_cens) {
survreg(Surv(left_clarity, right_clarity, type = 'interval2') ~ y + m, data = tb_cens, dist = 'gaussian')
}
##### group_by huc4 (12 huc4s)
by_huc4 %
group_by(huc4) %>%
nest()
# apply censored data model to each huc4 and mutate results to data frame
by_huc4 %
mutate(huc_model = map(data, cens_model))
by_huc4
哪个完美!还有,
##### group_by watershed (75 major watersheds)
by_watershed %
group_by(loc_major_basin) %>%
nest()
# apply censored data model to each watershed and mutate results to data frame
by_watershed %
mutate(watershed_model = map(data, cens_model))
by_watershed
哪个也可以完美运行!但是,对流(最小的group_by级别)尝试相同的技术会在外部函数调用中引发有关NA / NaN / Inf的错误。
##### group_by stream
by_stream %
group_by(sys_loc_code) %>%
nest()
# apply censored data model to each watershed and mutate results to data frame
by_stream %
mutate(stream_model = map(data, cens_model))
by_stream
这会出现以下错误:
Error in mutate_impl(.data, dots) :
Evaluation error: NA/NaN/Inf in foreign function call (arg 3).
我的数据中没有NA或NaN。最后一栏中有一些Inf,但是Tobit模型需要这些Inf,因为它们指定了正确的检查数据(并且map函数与最大和中间group_by级别完美配合。只有在按流级别分组时才有麻烦)。 / p>
有人对尝试将其付诸实践有任何想法。任何想法将不胜感激