On Jun 13, 2010, at 3:49 PM, Peter Ehlers wrote:
Giuseppe,
See comments below.
On 2010-06-13 10:24, David Winsemius wrote:
Giuseppe wrote:
Hello:
I use R with MAC
I have a simple data table, numeric and text columns, named dt.
The table
is imported through read.csv from a csv file. Row numbers are
automatically assigned, header is set to TRUE. there are 599 rows
and
several columns.
I am trying to plot using the stripchart command: one numeric
variable
(say dt$fnatg) vs a text column (say dt$pat). dt$pat contains one
of 3
values: "pos", "neg", ""
So I issue the following command:
stripchart (dt$fnatg~dt$pat)
and works well. it works well also with several options and nuances:
stripchart (dt$fnatg ~ dt$pat, method ="jitter", jitter = 0.3,
vertical
=TRUE,log="y", pch=1, ylab="Thyroglobulin (ng/mL)",xlab="Surgical
Pathology")
Now I want my graph to exclude values for which dt$pat == ""
I tried:
stripchart (dt$fnatg ~ dt$pat, method ="jitter", subset (dt,
dt$pat!=""),jitter = 0.3, vertical =TRUE,log="y", pch=1,
ylab="Thyroglobulin
(ng/mL)",xlab="Surgical Pathology")
there is no effect: the plot contains the same values as before
the I tried first subsetting the table:
patonly<-(dt, dt$pat!="") which works well in creating a new table
excluding the unwanted rows. I have noticed that the new table
keeps the
same row numbers assigned in the previous table. So row numbers now
go 1 to
599 but with some intervals (for example there is no row 475 etc.).
then I use:
stripchart (patonly$fnatg ~ patonly$pat, method ="jitter", jitter
= 0.3,
vertical =TRUE,log="y", pch=1, ylab="Thyroglobulin (ng/
mL)",xlab="Surgical
Pathology")
and I get the following error:
Error in plot.window(...) : need finite 'ylim' values
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In min(x) : no non-missing arguments to min; returning Inf
4: In max(x) : no non-missing arguments to max; returning -Inf
I f I try the same command but I use another text variable (for
example
patonly$gr) in the same table to split the plot, it now works:
stripchart (patonly$fnatg ~ patonly$gr, method ="jitter", jitter
= 0.3,
vertical =TRUE,log="y", pch=1, ylab="Thyroglobulin (ng/
mL)",xlab="Surgical
Pathology")
My question is two fold:
Why does not the subset command work within the stripchart command?
Why the subsetted table cannot be used in the stripchart command,
when the
plotting variable is the same previously used in the subsetting
process?
You appear to have adopted a strategy of using positional matching.
Naming
your arguments will often result in more informative error messages.
Looking at the help page for stripchart, it appears that there is no
"subset" parameter to set in any of its methods and only the
formula method
has a data argument. It should work with:
stripchart(formula1 , data=subset(dta,
subset=criteria), ....<rest of
arguments preferably named> )
Your other option might be to use the with() function:
with( subset(patonly, pat!=""), stripchart(fnatg ~ gr, ...<named
arguments>) )
HTH. and if it doesn't, then submit a reproducible data example to
work
with.
Actually, Giuseppe appears to have stumbled upon a bug in the
stripchart() function.
I thought when Guisseppe wrote:
I tried:
stripchart (dt$fnatg ~ dt$pat, method ="jitter", subset (dt,
dt$pat!=""),jitter = 0.3, vertical =TRUE,log="y", pch=1,
ylab="Thyroglobulin
(ng/mL)",xlab="Surgical Pathology")
... that the expression: subset(dt, dt$pat!="") , would get
erroneously matched to "dlab", the third parameter in the formula
method arg list, but maybe it would get matched to the "data", the
second parameter. I would also worry that specifying a data object,
but then in a sense contravening that specification by reference to
the full name in the formula specification (dt$fnatg) might cause
problems.
First, here's a fix:
After your command
patonly<-(dt, dt$pat!="")
which I assume is meant to be
patonly <- subset(dt, dt$pat!="")
and which can be written as
patonly <- subset(dt, pat!="")
you should issue this:
patonly$pat <- factor(patonly$pat)
which will remove the empty level; stripchart() should
work well after that (and do use the data= argument
rather than dt$...).
Alternatively, you could change your "text" variables
(which I assume are factors) to character values (or
re-import your data with stringsAsFactors = FALSE).
Now for the bug in stripchart():
If the *first* group of the grouping variable is
empty, then stripchart() has a problem determining
the range of data values (x-values for horizontal
charts, y-values otherwise). I can replicate your
problem withe OrchardSprays dataset:
# this works:
stripchart(decrease ~ treatment, data = OrchardSprays,
subset = treatment != "B")
# this doesn't
stripchart(decrease ~ treatment, data = OrchardSprays,
subset = treatment != "A")
I'll be submitting a bug report (and I think the fix
is easy).
-Peter Ehlers
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.