Hi Marianne,
The quick-and-dirty solution is to add one character and make ns global:
ns <<- nrow(x)
Poor practice, but OK temporarily if you're just debugging.
This is an issue of "scope". You are assuming dynamic scope, whereas R uses
static scope. 'ns' was not defined when you said paste("n=",ns); it doesn't
matter what its value is later. Even though R delays evaluation of the
argument until it is first needed, if it ends up being evaluated, the result is
the same as if you evaluated it in the environment where it appeared in the
text. You can do something like this:
myfun <- function(x, title.fun, ...) {
ns <- nrow(x)
title = title.fun(ns)
barplot(x , main=title, ... ) }
myfun(m1, title.fun=function(n) paste("n = ",n) )
Then the paste isn't evaluated until title.fun is *called*. If you don't want
to always supply title.fun, you give a default:
myfun <- function(x, title.fun=paste, ...) { ...
or
myfun <- function(x, title.fun=function(...){""}, ...) { ...
or
myfun <- function(x, title.fun=function(...){main}, main="", ...) { ... #
(I think)
Rex
-----------------------
Message: 4
Date: Wed, 2 Feb 2011 11:51:50 +0000
From: Marianne Promberger <[email protected]>
To: "[email protected]" <[email protected]>
Subject: [R] pass nrow(x) to dots in function(x){plot(x,...)}
Message-ID: <20110202115150.GD8598@lauren>
Content-Type: text/plain; charset=us-ascii
Dear Rers,
I have a function to barplot() a matrix, eg
myfun <- function(x, ...) { barplot(x , ... )}
(The real function is more complicated, it does things to the matrix first.)
So I can do:
m1 <- matrix(1:20,4)
myfun(m1)
myfun(m1, main="My title")
I'd like to be able to add the number of rows of the matrix passed to
the function to the "..." argument, eg
myfun(m1, main=paste("n=",ns))
where 'ns' would be nrow(m1)
I've tried this but it doesn't work:
myfun <- function(x, ...) {
ns <- nrow(x)
barplot(x , ... ) }
myfun(m1, main=paste("n = ",ns) )
ns is not found
So, basically, how do I assign an object inside a function that I can
then access in the dots when executing the function?
Many thanks
Marianne
--
Marianne Promberger PhD, King's College London
http://promberger.info
R version 2.12.0 (2010-10-15)
Ubuntu 9.04
------------------------------
message may contain confidential information. If you are not the designated
recipient, please notify the sender immediately, and delete the original and
any copies. Any use of the message by you is prohibited.
______________________________________________
[email protected] 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.