> Very interesting. But what explicitly happens with ***source()*** > in Splus???
Here are some examples where I use the exprs argument instead of making a tempory file and source the file. I don't know what you are looking for. (The OP never showed any calls to the functions in defined in his script, so I don't know what he was doing either.) S+> source( exprs = expression( 12:15, invisible(1/9), log2(1:10)), auto.print=TRUE) S+> 12:15 [1] 12 13 14 15 S+> invisible(1/9) S+> log2(1:10) [1] 0.000000 1.000000 1.584963 2.000000 2.321928 2.584963 2.807355 3.000000 [9] 3.169925 3.321928 S+> source( exprs = expression( 12:15, invisible(1/9), log2(1:10)), auto.print=TRUE, echo=FALSE) [1] 12 13 14 15 [1] 0.000000 1.000000 1.584963 2.000000 2.321928 2.584963 2.807355 3.000000 [9] 3.169925 3.321928 S+> source( exprs = expression( { 12:15 ; log2(1:10) } ), auto.print=TRUE) S+> { 12:15 log2(1:10) } [1] 0.000000 1.000000 1.584963 2.000000 2.321928 2.584963 2.807355 3.000000 [9] 3.169925 3.321928 The next doesn't autoprint because invisible() sets the autprint flag to FALSE in the caller's frame: S+> source( exprs = expression( { 12:15 ; invisible(1/9) ; log2(1:10) } ), auto.print=TRUE) S+> { 12:15 invisible(1/9) log2(1:10) } Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: Rolf Turner [mailto:rolf.tur...@xtra.co.nz] > Sent: Friday, June 07, 2013 4:46 PM > To: William Dunlap > Cc: r-help@r-project.org > Subject: Re: [R] SPlus script > > > 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-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > >> Of Rolf Turner > >> Sent: Friday, June 07, 2013 4:17 PM > >> To: Duncan Murdoch > >> Cc: r-help@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. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.