[Bioc-devel] role of replaceSlots in BiocGenerics
Hervé Pagès
hpages at fredhutch.org
Thu Sep 7 00:58:37 CEST 2017
On 09/06/2017 03:53 PM, Hervé Pagès wrote:
> One of the reasons it's not exported is because it started as something
> kind of experimental and we didn't find a good home for it yet. I could
> probably move it to S4Vectors where we already have some low-level
> S4-related utils. Not the best home either but maybe better than in
> BiocGenerics?
>
> IMO using something like replaceSlots() or initialize() is still better
> than using direct slot assignment when you need to replace more than 1
> slot. It's more compact and provide an all-slots-are-modified-at-once
> semantic (atomicity) which can be useful if modifying the slots one
> after the other could temporarily create an invalid object.
... and also it provided more opportunities for optimization e.g.
generate only 1 copy of the object being modified instead of 1 copy for
each slot being modified.
H.
>
> H.
>
> On 09/06/2017 03:41 PM, Vincent Carey wrote:
>> I am getting complaints from CMD check about ::: which seems necessary to
>> use this replaceSlots facility because it is not exported. I will look
>> into initialize,
>> which might work fine for my concern. I cannot remember why I did not
>> just
>> use direct assignment to slots, however. Perhaps I just found the
>> function and
>> decided using it would be better. It would be nice to export
>> replaceSlots
>> if it does not contravene an important principle.
>>
>> On Wed, Sep 6, 2017 at 5:23 PM, Hervé Pagès <hpages at fredhutch.org
>> <mailto:hpages at fredhutch.org>> wrote:
>>
>> Hi,
>>
>> Personally I like replaceSlots() better.
>>
>> Not only because it's more readable but also the fact that you can
>> use
>> initialize() to update an existing object is an undocumented
>> feature so
>> I prefer to not rely on it.
>>
>> Also initialize() is a generic and there could be a method defined
>> for
>> the object you're trying to update that won't behave the way you
>> expect
>> (e.g. the names of its arguments won't necessarily match the names of
>> the slots).
>>
>> Also validation can be expensive and there are many situations where
>> you know that you're replacing the object slots with thiings that
>> don't break the object so I like that I can call replaceSlots() with
>> check=FALSE.
>>
>> I actually wish the methods package had something like
>> replaceSlots().
>>
>> H.
>>
>> On 09/06/2017 01:11 PM, Michael Lawrence wrote:
>>
>> No, the best practice is to just use initialize(). It used to be
>> that
>> replaceSlots() saved some copying, but that's no longer really
>> the
>> case. The only potential benefit is that it can skip validity
>> checks,
>> but usually you want those.
>>
>> Michael
>>
>> On Wed, Sep 6, 2017 at 12:55 PM, Vincent Carey
>> <stvjc at channing.harvard.edu <mailto:stvjc at channing.harvard.edu>>
>> wrote:
>>
>> Is this the preferred way of adjusting content in a
>> live object? It is not accessible except via ":::"
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org>
>> mailing list
>>
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_bioc-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=iXa2JnAchBDp8QpTOD4yZHTEXOMu5gjBfDOMcvQCriU&s=0Rbio7Sp7SXzPgU4xGDGkWA7V-tkgkDizVkI9JMYQ2g&e=
>>
>>
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_bioc-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=iXa2JnAchBDp8QpTOD4yZHTEXOMu5gjBfDOMcvQCriU&s=0Rbio7Sp7SXzPgU4xGDGkWA7V-tkgkDizVkI9JMYQ2g&e=>
>>
>>
>>
>> _______________________________________________
>> Bioc-devel at r-project.org <mailto:Bioc-devel at r-project.org>
>> mailing list
>>
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_bioc-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=iXa2JnAchBDp8QpTOD4yZHTEXOMu5gjBfDOMcvQCriU&s=0Rbio7Sp7SXzPgU4xGDGkWA7V-tkgkDizVkI9JMYQ2g&e=
>>
>>
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_bioc-2Ddevel&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=iXa2JnAchBDp8QpTOD4yZHTEXOMu5gjBfDOMcvQCriU&s=0Rbio7Sp7SXzPgU4xGDGkWA7V-tkgkDizVkI9JMYQ2g&e=>
>>
>>
>>
>> --
>> Hervé Pagès
>>
>> Program in Computational Biology
>> Division of Public Health Sciences
>> Fred Hutchinson Cancer Research Center
>> 1100 Fairview Ave. N, M1-B514
>> P.O. Box 19024
>> Seattle, WA 98109-1024
>>
>> E-mail: hpages at fredhutch.org <mailto:hpages at fredhutch.org>
>> Phone: (206) 667-5791 <tel:%28206%29%20667-5791>
>> Fax: (206) 667-1319 <tel:%28206%29%20667-1319>
>>
>>
>
--
Hervé Pagès
Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024
E-mail: hpages at fredhutch.org
Phone: (206) 667-5791
Fax: (206) 667-1319
More information about the Bioc-devel
mailing list