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? Thank you Giuseppe |
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. -- David. |
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. 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 ______________________________________________ [hidden email] 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. |
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 ______________________________________________ [hidden email] 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. |
In reply to this post by Peter Ehlers
Thank you Peter, both your solutions worked for me. Why do you insist for using data = argument? Giuseppe Giuseppe |
Free forum by Nabble | Edit this page |