On May 12, 2017 4:23 PM, "Garth Ilsley" <garth.ils...@oist.jp> wrote:
Thank you. > One place where one might think of using R6 is in the implementation of a mutable data model underlying a GUI like a Shiny app. > If mutable semantics are required, consider using S4 reference classes, as they offer more features than R6 and will integrate > directly with Bioconductor S4 classes. If I understand correctly, you are saying that it is fine to use Reference classes (mutable semantics) in Bioconductor. A GUI is one clear place for this. However, what about a large dataset that is subject to progressive analysis with various fields updated as the analysis proceeds? The typical Bioconductor approach (as far as I have seen) is to call a method defined for an S4 functional class that produces a new object of the same class, with the result assigned to the same name as the original object. For a project considered in isolation, it wouldn't be unreasonable to use a Reference class for this instead, but that's not what I'm asking. My question is about the standards and approach that Bioconductor has agreed on - to ensure consistency. Is a Reference Class permissible in this situation? I dont speak for the project, but i would suggest that reference classes are really best/(almost) only useful for encoding state in complex/unusual-for-r package code. Having user-facing objects with these mechanics violates a pretty central idiom of R (copy on write) and thus is imo substantially more damaging than it is worth in general. One of the things that makes r simpler for beginners than other languages is that when they pass an object to a function that function "can't" change the version they have in their workspace. If not, case closed. If they are permitted, I would suggest that R6 semantics are consistent with Reference Class semantics, but with the added benefit of private members and "active bindi ngs" (they look like fields, but call a function). Refence classes absolutely can have active binding fields. It is pretty standard practice I think. As for private fields, no they don't have that, but I've never really been convinced you need them in the vast vast majority of cases. R is designed such that the user owns their data (ie the contents of their objects). I've never really heard a good augment why that shouldn't be the case. That said the typical idiom in all of my code is to have paired fields, an active binding which is a function. That does some checking/processing and a classed field with the same name prepended with a . That it corresponds to. Also R6 aren't really compatible with reference class/S4 mechanics because the fields are not classed. This may sound like a small thing but imo it's actually quite important. Best, ~G This is nice and simple (for the creator and user of the class), but if not desired (for consistency etc.), then I presume Reference Classes will do fine. _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel [[alternative HTML version deleted]] _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel