Hi, I need "mutable" objects that I can safely modify in my C code. All call interfaces, e.g. .C, .Call, etc., require you to not modify the "in" args. The description of the OOP package in R-news from Sep 2001 alludes to a possiblity of such objects, but the package itself is no longer on Omegahat and I am not sure I need the full machinery. Thanks, Vadim P.S. I wonder what is the relationship between the "methods" package and the OOP package described in R-news from Sep 2001. -------------------------------------------------- DISCLAIMER This e-mail, and any attachments thereto, is intended only for use by the addressee(s) named herein and may contain legally privileged and/or confidential information. If you are not the intended recipient of this e-mail, you are hereby notified that any dissemination, distribution or copying of this e-mail, and any attachments thereto, is strictly prohibited. If you have received this e-mail in error, please immediately notify me and permanently delete the original and any copy of any e-mail and any printout thereof. E-mail transmission cannot be guaranteed to be secure or error-free. The sender therefore does not accept liability for any errors or omissions in the contents of this message which arise as a result of e-mail transmission. NOTICE regarding privacy and confidentiality Knight Trading Group may, at its discretion, monitor and review the content of all e-mail communications. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Vadim Ogranovich wrote:> Hi, > > I need "mutable" objects that I can safely modify in my C code. All call > interfaces, e.g. .C, .Call, etc., require you to not modify the "in" args.I took a quick look at the code for .Call() and it appears not to copy its arguments. As a result, however, you can use this to modify objects in place and they effects will persist. This is not "recommended" but does work for many purposes. A simple example where one can see this effect is with the following C code. #include "Rinternals.h" SEXP foo(SEXP x, SEXP y) { int n = LENGTH(x), i; for(i = 0; i < n; i++) { REAL(x)[i] += 1.0; REAL(y)[i] *= REAL(y)[i]; } return(x); } Calling this from R as x <- as.numeric(1:10) y <- as.numeric(1:10) z <- .Call("foo", x, y) Then look at the values of x, y and z. The .Call() is currently incompatabile with S4 & S-Plus 6, I believe. We should probably correct this by adding a COPY argument and making duplication the default behavior. The OOP package provides both i) a way for creating mutable objects using environments and ii) a formal mechanism for specifying classes and inheritance from those classes. It sounds like you (currently) only need environments. The package is available from http://www.omegahat.org/OOP D.> The description of the OOP package in R-news from Sep 2001 alludes to a > possiblity of such objects, but the package itself is no longer on Omegahat > and I am not sure I need the full machinery. > > Thanks, Vadim > > > P.S. I wonder what is the relationship between the "methods" package and the > OOP package described in R-news from Sep 2001. > > -------------------------------------------------- > DISCLAIMER > This e-mail, and any attachments thereto, is intended only for use by the > addressee(s) named herein and may contain legally privileged and/or > confidential information. If you are not the intended recipient of this > e-mail, you are hereby notified that any dissemination, distribution or > copying of this e-mail, and any attachments thereto, is strictly prohibited. > If you have received this e-mail in error, please immediately notify me and > permanently delete the original and any copy of any e-mail and any printout > thereof. > > E-mail transmission cannot be guaranteed to be secure or error-free. The > sender therefore does not accept liability for any errors or omissions in > the contents of this message which arise as a result of e-mail transmission. > > NOTICE regarding privacy and confidentiality > > Knight Trading Group may, at its discretion, monitor and review the content > of all e-mail communications. > > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html > Send "info", "help", or "[un]subscribe" > (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._-- _______________________________________________________________ Duncan Temple Lang duncan at research.bell-labs.com Bell Labs, Lucent Technologies office: (908)582-3217 700 Mountain Avenue, Room 2C-259 fax: (908)582-3340 Murray Hill, NJ 07974-2070 http://cm.bell-labs.com/stat/duncan -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Duncan, Thank you for your reply. I knew I could modify the args in .Call (and even in .C though not by default), but I was scared off by "not recommended" in the manual. Is there a simple rule that tells when it's safe to modify the args in place, or probably give an example when it is NOT safe? Thanks, Vadim -----Original Message----- From: Duncan Temple Lang [mailto:duncan at research.bell-labs.com] Sent: Monday, July 15, 2002 12:26 PM To: Vadim Ogranovich Cc: 'r-help at lists.R-project.org' Subject: Re: [R] mutable objects Vadim Ogranovich wrote:> Hi, > > I need "mutable" objects that I can safely modify in my C code. All call > interfaces, e.g. .C, .Call, etc., require you to not modify the "in" args.I took a quick look at the code for .Call() and it appears not to copy its arguments. As a result, however, you can use this to modify objects in place and they effects will persist. This is not "recommended" but does work for many purposes. -------------------------------------------------- DISCLAIMER This e-mail, and any attachments thereto, is intended only for use by the addressee(s) named herein and may contain legally privileged and/or confidential information. If you are not the intended recipient of this e-mail, you are hereby notified that any dissemination, distribution or copying of this e-mail, and any attachments thereto, is strictly prohibited. If you have received this e-mail in error, please immediately notify me and permanently delete the original and any copy of any e-mail and any printout thereof. E-mail transmission cannot be guaranteed to be secure or error-free. The sender therefore does not accept liability for any errors or omissions in the contents of this message which arise as a result of e-mail transmission. NOTICE regarding privacy and confidentiality Knight Trading Group may, at its discretion, monitor and review the content of all e-mail communications. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
BTW, this is used in the code for state-space models in (standard) package ts. On Mon, 15 Jul 2002, Duncan Temple Lang wrote:> Vadim Ogranovich wrote: > > Hi, > > > > I need "mutable" objects that I can safely modify in my C code. All call > > interfaces, e.g. .C, .Call, etc., require you to not modify the "in" args. > > I took a quick look at the code for .Call() and it appears not to copy > its arguments. As a result, however, you can use this to modify objects in > place and they effects will persist. This is not "recommended" but > does work for many purposes. > > A simple example where one can see this effect is > with the following C code. > > #include "Rinternals.h" > > SEXP > foo(SEXP x, SEXP y) > { > int n = LENGTH(x), i; > > for(i = 0; i < n; i++) { > REAL(x)[i] += 1.0; > REAL(y)[i] *= REAL(y)[i]; > } > > return(x); > } > > Calling this from R as > > x <- as.numeric(1:10) > y <- as.numeric(1:10) > z <- .Call("foo", x, y) > > Then look at the values of x, y and z. > > > > The .Call() is currently incompatabile with S4 & S-Plus 6, I believe. > We should probably correct this by adding a COPY argument and making > duplication the default behavior. > > > The OOP package provides both i) a way for creating mutable objects > using environments and ii) a formal mechanism for specifying classes > and inheritance from those classes. It sounds like you (currently) > only need environments. The package is available from > http://www.omegahat.org/OOP > > D. > > > > > The description of the OOP package in R-news from Sep 2001 alludes to a > > possiblity of such objects, but the package itself is no longer on Omegahat > > and I am not sure I need the full machinery. > > > > Thanks, Vadim > > > > > > P.S. I wonder what is the relationship between the "methods" package and the > > OOP package described in R-news from Sep 2001. > > > > -------------------------------------------------- > > DISCLAIMER > > This e-mail, and any attachments thereto, is intended only for use by the > > addressee(s) named herein and may contain legally privileged and/or > > confidential information. If you are not the intended recipient of this > > e-mail, you are hereby notified that any dissemination, distribution or > > copying of this e-mail, and any attachments thereto, is strictly prohibited. > > If you have received this e-mail in error, please immediately notify me and > > permanently delete the original and any copy of any e-mail and any printout > > thereof. > > > > E-mail transmission cannot be guaranteed to be secure or error-free. The > > sender therefore does not accept liability for any errors or omissions in > > the contents of this message which arise as a result of e-mail transmission. > > > > NOTICE regarding privacy and confidentiality > > > > Knight Trading Group may, at its discretion, monitor and review the content > > of all e-mail communications. > > > > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- > > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html > > Send "info", "help", or "[un]subscribe" > > (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch > > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._ > > -- > _______________________________________________________________ > > Duncan Temple Lang duncan at research.bell-labs.com > Bell Labs, Lucent Technologies office: (908)582-3217 > 700 Mountain Avenue, Room 2C-259 fax: (908)582-3340 > Murray Hill, NJ 07974-2070 > http://cm.bell-labs.com/stat/duncan > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html > Send "info", "help", or "[un]subscribe" > (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._ >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272860 (secr) Oxford OX1 3TG, UK Fax: +44 1865 272595 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._