On Nov 22, 2009, at 6:26 AM, soeren.vo...@eawag.ch wrote:

I have created a function to do something:

i <- factor(sample(c("A", "B", "C", NA), 793, rep=T, prob=c(8, 7, 5, 1))) k <- factor(sample(c("X", "Y", "Z", NA), 793, rep=T, prob=c(12, 7, 9, 1)))
mytable <- function(x){
 xtb <- x
 btx <- x
 # do more with x, not relevant here
 cat("The table has been created, see here:\n")
 print(xtb)
 list(table=xtb, elbat=btx)
}
tbl <- table(i, k)
mytable(tbl) # (1)
z <- mytable(tbl) # (2)
str(z) # (3)

(1) Wanted: outputs the string and the table properly. *Unwanted*: outputs the list elements.


Whet the author of a function wants a particular object that exists insode a function to be returned they may warp it in the function return(). Otherwise R returns the result of the last evaluation which in this case was list(table=xtb, elbat=btx).

If you want the function to return <something else>. then you could put <something else> last in the sequence. If you want it to return <nothing> than put this at the end:

return()

If you want the results to not be printed the use invisible()

Perhaps:
invisible(list( elbat=btx)) #substituted for list(table=xtb, elbat=btx) after the print line

> tbl <- table(i, k)
> mytable(tbl) # (1)
The table has been created, see here:
   k
i     X   Y   Z
  A 119  69  89
  B 116  70  97
  C  80  36  52
> z <- mytable(tbl) # (2)
The table has been created, see here:
   k
i     X   Y   Z
  A 119  69  89
  B 116  70  97
  C  80  36  52
> str(z) # (3)
List of 1
 $ elbat: 'table' int [1:3, 1:3] 119 116 80 69 70 36 89 97 52
  ..- attr(*, "dimnames")=List of 2
  .. ..$ i: chr [1:3] "A" "B" "C"
  .. ..$ k: chr [1:3] "X" "Y" "Z"



(2) and (3) Wanted: outputs the string properly. Wanted: assigns the list properly.

If you want to return the list, elbat, then just put the name of the list last in your case inside invisible or put it inside return().



How can I get rid of the *unwanted* part? That is, how do I define what the functions prints

That set by cat and print in your case.

and -- on the other hand -- what it returns without printing?

By return()  or the order of evaluation


--

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.

Reply via email to