Re: [R] Basic function output/scope question

2009-09-22 Thread David Young
Thanks Erik, Schalk, Patrick, and David for you helpful advice.  I
hope I'll, at some point, I'll become versed enough in R to return the
favor.


-- 
Best regards,

David Young
Marketing and Statistical Consultant
Madrid, Spain
+34 913 540 381
http://www.linkedin.com/in/europedavidyoung



Monday, September 21, 2009, 5:42:35 PM, you wrote:

EI Hello, 

 
 testfunc-function(x)
 { y-10
 print(y)
 print(x)
 }
 
 testfunc(4)
 
 The variables x and y are accessible during execution of the function
 testfunc but not afterwards.  

EI In R, expressions return values.  When you define a function, ?function 
says that, If the end of a function is reached without calling 'return', the 
value of the last evaluated expression is
EI returned. 

EI So you are correct, 'x' and 'y' are local variables, and by all accounts 
they should be.  If you want their values accessible, simply return them.

EI ## return just y
EI testfunc2 - function(x) {
EIy - 10
EIy
EI }

EI ## return both x and y 
EI testfunc2 - function(x) {
EIy - 10
EIlist(x, y)
EI }

EI There are ways to make x and y global from within a function, but in 
general that is not the R way to do things! 

EI Hope that helps, 
EI Erik Iverson

__
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.


Re: [R] Basic function output/scope question

2009-09-21 Thread Schalk Heunis
Don't know SAS, but you can use y-10 to make the answer available in
the global environement.  See ?'-'
To define the output see ?return

Schalk Heunis


On Mon, Sep 21, 2009 at 5:29 PM, David Young dyo...@telefonica.net wrote:
 Hello Group,

 I'm trying to learn R and am having a problem getting output from a
 function I'm trying to write.  The problem is clearly one of scope,
 but I can't find the documentation that tells me how to get around the
 issue.

 Here is an example of my problem.

 testfunc-function(x)
 { y-10
 print(y)
 print(x)
 }

 testfunc(4)

 The variables x and y are accessible during execution of the function
 testfunc but not afterwards.  I've read through the Introduction to
 R, and the R language definition on functions, but do not see how to
 define the output of the function, or change the scope of a function
 variable using the R equivalent of a %global statement as would be
 done in SAS.  Can someone tell me either where I can look for more
 information or how to make x and y accessible to operations after the
 function is run?

 Thanks in advance for any suggestions.



 --
 Best regards,

 David Young
 Marketing and Statistical Consultant
 Madrid, Spain
 +34 913 540 381
 http://www.linkedin.com/in/europedavidyoung

                          mailto:dyo...@telefonica.net

 __
 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.


__
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.


Re: [R] Basic function output/scope question

2009-09-21 Thread Erik Iverson
Hello, 

 
 testfunc-function(x)
 { y-10
 print(y)
 print(x)
 }
 
 testfunc(4)
 
 The variables x and y are accessible during execution of the function
 testfunc but not afterwards.  

In R, expressions return values.  When you define a function, ?function says 
that, If the end of a function is reached without calling 'return', the value 
of the last evaluated expression is returned. 

So you are correct, 'x' and 'y' are local variables, and by all accounts they 
should be.  If you want their values accessible, simply return them.

## return just y
testfunc2 - function(x) {
   y - 10
   y
}

## return both x and y 
testfunc2 - function(x) {
   y - 10
   list(x, y)
}

There are ways to make x and y global from within a function, but in general 
that is not the R way to do things! 

Hope that helps, 
Erik Iverson 

__
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.


Re: [R] Basic function output/scope question

2009-09-21 Thread David Winsemius


On Sep 21, 2009, at 11:29 AM, David Young wrote:


Hello Group,

I'm trying to learn R and am having a problem getting output from a
function I'm trying to write.  The problem is clearly one of scope,
but I can't find the documentation that tells me how to get around the
issue.

Here is an example of my problem.

testfunc-function(x)
{ y-10
print(y)
print(x)
}

testfunc(4)


The print function calls done inside testfunc have side effects of  
printing to the console. See this additional code that demonstrates  
that the returned value is actually x which is the last evaluated  
object in the function. You should also look at the return function.


 z-testfunc(4)
[1] 10   # side-effect but NOT the returned value
[1] 4
 z
[1] 4   # the returned value

?return

--
David.


The variables x and y are accessible during execution of the function
testfunc but not afterwards.  I've read through the Introduction to
R, and the R language definition on functions, but do not see how to
define the output of the function, or change the scope of a function
variable using the R equivalent of a %global statement as would be
done in SAS.  Can someone tell me either where I can look for more
information or how to make x and y accessible to operations after the
function is run?

Thanks in advance for any suggestions.



--
Best regards,

David Young
Marketing and Statistical Consultant
Madrid, Spain
+34 913 540 381
http://www.linkedin.com/in/europedavidyoung

 mailto:dyo...@telefonica.net

__
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.


David Winsemius, MD
Heritage Laboratories
West Hartford, CT

__
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.


Re: [R] Basic function output/scope question

2009-09-21 Thread Erik Iverson
I see you've already been told about -.  The reason I (and presumably 
others?) stay away from that construct is that your function then has side 
effects that a user (even yourself) may not anticipate or want, namely possibly 
overwriting a previous variable in your global environment.  The help for ?- 
says, 

The operators '-' and '-' cause a search to made through the
 environment for an existing definition of the variable being
 assigned.  If such a variable is found (and its binding is not
 locked) then its value is redefined, otherwise assignment takes
 place in the global environment.

So this is not even guaranteed to assign in the Global Environment!!

 To follow-up on my previous email, you usually assign the results of your 
function call to a variable if you want to use them further. For example, 

## return both x and y
testfunc2 - function(x) {
   y - 10
   list(x, y)
}

my.var - testfunc2(4)

another.function(my.var)

 -Original Message-
 From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org]
 On Behalf Of Erik Iverson
 Sent: Monday, September 21, 2009 10:43 AM
 To: David Young; r-help@r-project.org
 Subject: Re: [R] Basic function output/scope question
 
 Hello,
 
 
  testfunc-function(x)
  { y-10
  print(y)
  print(x)
  }
 
  testfunc(4)
 
  The variables x and y are accessible during execution of the function
  testfunc but not afterwards.
 
 In R, expressions return values.  When you define a function, ?function
 says that, If the end of a function is reached without calling 'return',
 the value of the last evaluated expression is returned.
 
 So you are correct, 'x' and 'y' are local variables, and by all accounts
 they should be.  If you want their values accessible, simply return them.
 
 ## return just y
 testfunc2 - function(x) {
y - 10
y
 }
 
 ## return both x and y
 testfunc2 - function(x) {
y - 10
list(x, y)
 }
 
 There are ways to make x and y global from within a function, but in
 general that is not the R way to do things!
 
 Hope that helps,
 Erik Iverson
 
 __
 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.

__
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.