Closed billdenney closed 10 months ago
I think that it occurs during printing, but it may have a more general source.
It is more general, actually you an assign it and not print it and it gives the same error.
A C-based backtrace:
#0 0x00007ffff4eae4e1 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
nlmixr2/nlmixr2#1 0x00007fffed888058 in Rcpp::Vector<19, Rcpp::PreserveStorage>::offset (name="units",
this=<optimized out>) at /usr/lib/R/site-library/Rcpp/include/Rcpp/vector/Vector.h:313
nlmixr2/nlmixr2#2 Rcpp::internal::generic_name_proxy<19, Rcpp::PreserveStorage>::set (this=0x7ffffffd2c70,
rhs=0x55555beedbe8) at /usr/lib/R/site-library/Rcpp/include/Rcpp/vector/proxy.h:184
nlmixr2/nlmixr2#3 0x00007fffed8571c6 in Rcpp::internal::generic_name_proxy<19, Rcpp::PreserveStorage>::operator=<Rcpp::Vector<16, Rcpp::PreserveStorage> > (rhs=..., this=0x7ffffffd2c70)
at /usr/lib/R/site-library/Rcpp/include/Rcpp/vector/proxy.h:157
nlmixr2/nlmixr2#4 etEmpty (units=...) at et.cpp:240
nlmixr2/nlmixr2#5 0x00007fffed879071 in et_ (input=..., et__=...) at et.cpp:3116
nlmixr2/nlmixr2#6 0x00007fffed83544d in _rxode2et_et_ (inputSEXP=0x55555ada0cc0, et__SEXP=<optimized out>)
at RcppExports.cpp:46
nlmixr2/nlmixr2#7 0x00007ffff7afb2ba in ?? () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2#8 0x00007ffff7b3e263 in ?? () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2#9 0x00007ffff7b52cf0 in Rf_eval () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2#10 0x00007ffff7b54d86 in ?? () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2est#151 0x00007ffff7b55bb5 in Rf_applyClosure () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2#12 0x00007ffff7b52e1c in Rf_eval () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2#13 0x00007ffff7ae2769 in R_UnwindProtect () from /usr/lib/R/lib/libR.so
nlmixr2/nlmixr2#14 0x00007fffed6c0d3f in Rcpp::unwindProtect (
callback=0x7fffed6bfe10 <Rcpp::internal::Rcpp_protected_eval(void*)>, data=0x7ffffffd6160)
at /usr/lib/R/site-library/Rcpp/include/Rcpp/unwindProtect.h:74
nlmixr2/nlmixr2#15 0x00007fffed7d4396 in Rcpp::Rcpp_fast_eval (env=0x5555555a8998, expr=0x55555ada10b0)
at /usr/lib/R/site-library/Rcpp/include/Rcpp/api/meat/Rcpp_eval.h:63
nlmixr2/nlmixr2#16 Rcpp::Function_Impl<Rcpp::PreserveStorage>::invoke (env=<optimized out>, args_=<optimized out>,
this=<optimized out>) at /usr/lib/R/site-library/Rcpp/include/Rcpp/Function.h:118
nlmixr2/nlmixr2#17 Rcpp::Function_Impl<Rcpp::PreserveStorage>::operator()<SEXPREC*, SEXPREC*> (
t2=<synthetic pointer>: <optimized out>, t2=<synthetic pointer>: <optimized out>,
t1=<synthetic pointer>: <optimized out>, this=0x7ffffffd6150)
at /usr/lib/R/site-library/Rcpp/include/Rcpp/generated/Function__operator.h:40
nlmixr2/nlmixr2#18 _rxode2_et_ (x1=<optimized out>, x2=<optimized out>) at utilcpp.cpp:66
nlmixr2/nlmixr2#19 0x00007fffed76587b in et_ (input=..., et__=...)
at /usr/lib/R/site-library/Rcpp/include/Rcpp/storage/PreserveStorage.h:75
nlmixr2/nlmixr2est#176 0x00007fffed76f172 in getEtRxsolve (e=...) at rxData.cpp:2220
nlmixr2/rxode2et#21 0x00007fffed78b464 in updateSolveEnvPost (e=...) at rxData.cpp:2443
nlmixr2/nlmixr2#22 0x00007fffed78d923 in rxSolveGet_rxSolve (obj=..., sarg="ui", exact=..., lst=...)
at rxData.cpp:5258
nlmixr2/nlmixr2#23 0x00007fffed78fdbc in rxSolveGet (obj=..., arg=..., exact=...) at rxData.cpp:5471
nlmixr2/nlmixr2#24 0x00007fffed6bb3c6 in _rxode2_rxSolveGet_try (objSEXP=0x55555c63dbe8, argSEXP=<optimized out>,
exactSEXP=<optimized out>) at RcppExports.cpp:855
nlmixr2/nlmixr2#25 0x00007fffed6bb4eb in _rxode2_rxSolveGet (objSEXP=0x55555c63dbe8, argSEXP=0x55555b88b080,
exactSEXP=0x55555b887b48) at RcppExports.cpp:863
Nope that isn't the backtrace...
Here is a simpler reprex:
library(nlmixr2)
#> Loading required package: nlmixr2data
library(nlmixr2lib)
d_mod <-
data.frame(
Dose = c(5, 5, 5, 5, 5, 5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 5, 5, 5, 5, 5, 5),
ID = c("001-0001", "001-0002", "001-0003", "001-0004", "001-0005", "001-0006", "001-0007", "001-0008", "001-0009", "001-0010", "001-0011", "001-0012", "001-0013", "001-0014", "001-0015", "001-0016", "001-0017", "001-0018"),
TIME = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
EVID = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
CMT = c("central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central", "central"),
AMT = c(5, 5, 5, 5, 5, 5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 5, 5, 5, 5, 5, 5),
WT = c(70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70)
)
mymodel <- readModelDb("PK_1cmt") %>%
model(-ka)
#> ! remove population parameter `lka`
d_sim_raw <- nlmixr(object = mymodel, data = d_mod, est = "rxSolve")
d_sim_raw
#> Error: Cannot convert object to a function: [type=NULL; target=CLOSXP, SPECIALSXP, or BUILTINSXP].
Created on 2023-08-15 with reprex v2.0.2
The error appears to happen here:
https://github.com/nlmixr2/rxode2/blob/22570e74d78561ebb29e4becbfb98075d0358fee/R/rxsolve.R#L1748
The specific call that is causing a problem is x$pars, but there seems to be a general issue with the $
operator for d_sim_raw
.
One thing that I found unique about the simulation above is that there are no observation rows. (Update: The fact that there are no observation rows is not the problem.)
I agree. I did trace it back to that point, though I couldn't find the srouce in C/C++ yet.
For reasons I don't understand, I get the error in the issue subject with the example below.
Created on 2023-06-10 with reprex v2.0.2