[R] SPlus script
Rolf Turner
rolf.turner at xtra.co.nz
Sat Jun 8 01:45:48 CEST 2013
Very interesting. But what explicitly happens with ***source()***
in Splus???
cheers,
Rolf
On 08/06/13 11:33, William Dunlap wrote:
>> foo <- function(x) {
>> sin(42)
>> x^2
>> }
>>
>> foo(3)
>> [1] 9
>>
>> The value of sin(42) is never seen.
> This is true in both R and S+. Only the return value of a function is available
> for autoprinting and sin(42) is not the return value. Perhaps you are remembering
> the case where the last subexpression in the function is an assignment, in which
> case S+ autoprints its value but R does not.
>
> R> f <- function(x) { y <- x + 1 }
> R> f(10)
> R> .Last.value
> [1] 11
>
> S+> f <- function(x) { y <- x + 1 }
> Warning messages:
> Last expression in function is an assignment
> (You probably wanted to return the left-hand side)
> in: y <- x + 1
> S+> f(10)
> [1] 11
> S+> .Last.value
> [1] 11
>
> Autoprinting is implemented quite differently in R and S+. I think R attaches
> the autoprint flag to the returned object while S+ assigns .Auto.print<-TRUE
> in the frame of the caller (yuck). That leads to differences like the following
>
> R> f <- function(x) invisible(x+1)
> R> g <- function(x) 10 * x
> R> g(f(23)) # g() and f() are evaluated in same frame
> [1] 240
> R> .Last.value
> [1] 240
>
> S+> f <- function(x) invisible(x+1)
> S+> g <- function(x) 10 * x
> S+> g(f(23)) # g() and f() are evaluated in same frame
> S+> .Last.value
> [1] 240
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
>
>> -----Original Message-----
>> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
>> Of Rolf Turner
>> Sent: Friday, June 07, 2013 4:17 PM
>> To: Duncan Murdoch
>> Cc: r-help at r-project.org; Scott Raynaud
>> Subject: Re: [R] SPlus script
>>
>> On 07/06/13 23:05, Duncan Murdoch wrote:
>>> On 13-06-06 6:22 PM, Rolf Turner wrote:
>>>> On 07/06/13 03:19, Scott Raynaud wrote:
>>>>> I actually had tried placing arguments in the call but it didn't
>>>>> work. However, I did
>>>>> not think about writing it to a variable and printing. That seems
>>>>> to have done the
>>>>> trick. Funny, I don't remember having to do that before, but that's
>>>>> not surprising.
>>>>>
>>>> If I remember correctly --- haven't used Splus for decades --- this is a
>>>> difference
>>>> between Splus and R.
>>>>
>>>> In R the output of a function is returned *invisibly* if that function
>>>> is called
>>>> from within another function. And source() is one such other function.
>>> Actually this depends on the caller. source() does return its results
>>> invisibly, but many other functions don't.
>> From FAQ 7.16:
>>> If you type '1+1' or 'summary(glm(y~x+z, family=binomial))' at the
>>> command line the returned value is automatically printed (unless it is
>>> |invisible()|), but in other circumstances, such as in a |source()|d
>>> file or ***inside a function*** it isn't printed unless you
>>> specifically print it.
>> (Emphasis added.)
>>
>> I think that you have misinterpreted what I wrote. Many (most?) functions
>> *return* their results (values) visibly. But if you put an expression
>> into the code
>> of that function (an expression which is not part of the returned value)
>> you never
>> see the result of evaluating that expression.
>>
>> E.g.:
>>
>> foo <- function(x) {
>> sin(42)
>> x^2
>> }
>>
>> foo(3)
>> [1] 9
>>
>> The value of sin(42) is never seen.
>>
>> The main point however is that IIRC Splus is different from R in respect
>> of whether the values of (un-assigned) expressions inside source are
>> visible. In R they are invisible; in Splus I *believe* (vaguely recall)
>> that
>> they are visible. I cannot check this since I have no access to Splus.
>>
>> I do wish someone would confirm (or deny, as the case may be) that
>> my recollections about Splus are correct.
More information about the R-help
mailing list