Radford Neal
2018-Sep-03 13:18 UTC
[Rd] True length - length(unclass(x)) - without having to call unclass()?
Regarding the discussion of getting length(unclass(x)) without an unclassed version of x being created... There are already no copies done for length(unclass(x)) in pqR (current version of 2017-06-09 at pqR-project.org, as well as the soon-to-be-release new version). This is part of a more general facility for avoiding copies from unclass in other circumstances as well - eg, unclass(a)+unclass(b). It's implemented using pqR's internal "variant result" mechanism. Primitives such as "length" and "+" can ask for their arguments to be evaluated in such a way that an "unclassed" result is possibly returned with its class attribute still there, but with a flag set (not in the object) to indicate that it should be ignored. The variant result mechanism is also central to many other pqR improvements, including deferred evaluation to enable automatic use of multiple cores, and optimizations that allow fast evaluation of things like any(x<0), any(is.na(x)), or all(is.na(x)) without creation of intermediate results and with early termination when the result is determined. It is much better to use such a general mechanism that speeds up existing code than to implement more and more special-case functions like anyNA or some special function to allow length(unclass(x)) to be done quickly. The variant result mechanism has extremely low overhead, and is not hard to implement. Radford Neal
Maybe Matching Threads
- True length - length(unclass(x)) - without having to call unclass()?
- length(unclass(x)) without unclass(x)?
- True length - length(unclass(x)) - without having to call unclass()?
- True length - length(unclass(x)) - without having to call unclass()?
- True length - length(unclass(x)) - without having to call unclass()?