On Jul 9, 2011, at 4:20 AM, andrewH wrote:
Using str() in a function.

I am in the early phase of learning R, and I find I spend a lot of time trying to figure out what is actually in objects I have created or read in
from a file.  I'm trying to make a simple little function to display a
couple of things about a object, let's say the summary() and the str(), sequentially, preferably without a bunch of surplus lines between them. I
have tried a large number of things; none do what I want.

GG<- c(1,2,3)
# This one ignores the str().
testX <- function(X) {return(summary(X)); str(X)}
testX(GG)
  Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   1.0     1.5     2.0     2.0     2.5     3.0
snipped long list of unsuccessful attempts to return str results

# This one displays both, in reverse order, with a superfluous (to my
intentions) [[NULL]].
testX4 <- function(X) {list(summary(X), (str(X)))}
testX4(GG)
num [1:3] 1 2 3
[[1]]
  Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
   1.0     1.5     2.0     2.0     2.5     3.0

[[2]]
NULL

I tried a bunch more, using the print command, etc., but nothng I tried resulted in the output of summary() followed by the output of str(). And is there really no way to assign the output of str() -- that is to say, the
output str() normally prints to the console -- to an object?
?str

It says: "Value str does not return anything, for efficiency reasons. The obvious side effect is output to the terminal."
(Always a good idea to read the `Value` section of a help page.)
What you see at the terminal when you make an assignment is not what happens inside a function. The effects inside a function environment are only visible if they change the returned object (or cause an error). Most (if not all) of the output at the terminal is the result of cat() which also returns NULL invisibly. So str, like most base plotting functions, is useful for its side-effects rather than for its returned value.
If you want to get rid of what you are calling "the superfluous NULL",  
then use c() rather than list:
> testX7 <- function(X) {return(c(summary(X), str(X)))}

> testX7(GG)

 int [1:3] 1 2 3

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

    1.0     1.5     2.0     2.0     2.5     3.0



"
I would be very greatful for any guidance you could offer.

Sincerely, Andrew

--
View this message in context: 
http://r.789695.n4.nabble.com/Using-str-in-a-function-tp3655785p3655785.html
Sent from the R help mailing list archive at Nabble.com.

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

Reply via email to