[R] How to select the column header with \Sexpr{}

Ista Zahn izahn at psych.rochester.edu
Tue Jul 13 17:57:09 CEST 2010


Hi Felipe,
See in line below.

On Tue, Jul 13, 2010 at 11:04 AM, Felipe Carrillo
<mazatlanmexico at yahoo.com> wrote:
> Thanks Izta:
> I see your point, then I should extract the column names when the
> dataset is first read because is a dataframe:

That might work, but it's definitely not how I would do it.

>  report <- structure(list(Date = c("3/12/2010", "3/13/2010", "3/14/2010",
>  "3/15/2010"), Run1 = c("33 (119 ? 119)", "n (0 ? 0)", "893 (110 ? 146)",
>  "140 (111 ? 150)"), Run2 = c("33 (71 ? 71)", "n (0 ? 0)",
>  "337 (67 ? 74)", "140 (68 ? 84)"), Run3 = c("890 (32 ? 47)",
>  "n (0 ? 0)", "10,602 (32 ? 52)", "2,635 (34 ? 66)"), Run4 = c("0 ( ? )",
>  "n (0 ? 0)", "0 ( ? )", "0 ( ? )"), Run4 = c("0 ( ? )", "n (0 ? 0)",
> "0 ( ? )", "0 ( ? )")), .Names = c("ID_Date", "Run1", "Run2",
> "Run3", "Run4", "Run5"), row.names = c(NA, 4L), class = "data.frame")
> str(report)
> 'data.frame':   4 obs. of  6 variables:
>  $ ID_Date: chr  "3/12/2010" "3/13/2010" "3/14/2010" "3/15/2010"
>  $ Run1   : chr  "33 (119 ? 119)" "n (0 ? 0)" "893 (110 ? 146)" "140 (111 ?
> 150)"
>  $ Run2   : chr  "33 (71 ? 71)" "n (0 ? 0)" "337 (67 ? 74)" "140 (68 ? 84)"
>  $ Run3   : chr  "890 (32 ? 47)" "n (0 ? 0)" "10,602 (32 ? 52)" "2,635 (34 ?
> 66)"
>  $ Run4   : chr  "0 ( ? )" "n (0 ? 0)" "0 ( ? )" "0 ( ? )"
>  $ Run5   : chr  "0 ( ? )" "n (0 ? 0)" "0 ( ? )" "0 ( ? )"
>  names(report)[1]  # I can extract the column name here
> [1] "Date"
>
> But after I use 'stringr" to convert the character '?' to '-'
> 'report' is not a dataframe anymore and returns a NULL when trying to extract
> the
> column names.

No, it will not report NULL when extracting _column names_. Try
colnames(report). It will report NULL when trying to extract the
_names_ using names(report), because matrices have colnames and
rownames but not names.

> I was not aware that \Sexpr{} only work on dataframes, thanks for your help.

The problem is _not with \Sexpr_. The problem is that you are asking
for the names() of a matrix, which do not exist in R. You can use
colnames() like this

\Sexpr{colnames(report)[1]}

or you can convert report to a data.frame and use names, like this

\Sexpr{names(as.data.frame(report))[1]}

HTH,
Ista

>
>
>
> ----- Original Message ----
>> From: Ista Zahn <izahn at psych.rochester.edu>
>> To: Felipe Carrillo <mazatlanmexico at yahoo.com>
>> Cc: David Winsemius <dwinsemius at comcast.net>; r-help at stat.math.ethz.ch
>> Sent: Tue, July 13, 2010 7:13:39 AM
>> Subject: Re: [R] How to select the column header with \Sexpr{}
>>
>> Hi Felipe,
>> The problem has nothing to do with Sweave or \Sexpr. The problem is
>> that by the time you call \Sexpr report is a matrix, and you cannot
>> access the column names of a matrix with names(). You need to use
>> colnames() or convert the matrix to a data.frame.
>>
>> Perhaps a true useR can write R code in a Sweave file without checking
>> it, but for mere mortals it is best to evaluate the R code in an
>> interactive session to make sure it works before asking Sweave to
>> insert it into your .tex file. If you had tried to evaluate
>> names(report)[1] in an interactive session you would have discovered
>> your problem immediately.
>>
>> Best,
>> Ista
>>
>> On Tue, Jul 13, 2010 at 4:15 AM, Felipe Carrillo
>> <mazatlanmexico at yahoo.com> wrote:
>> > I had tried that earlier and didn't work either, I probably have \Sexpr in
>>the
>> > wrong place. See example:
>> > Column one header gets blank:
>> >
>> > \documentclass[11pt]{article}
>> > \usepackage{longtable,verbatim,ctable}
>> > \usepackage{longtable,pdflscape}
>> > \usepackage{fmtcount,hyperref}
>> > \usepackage{fullpage}
>> > \title{United States}
>> > \begin{document}
>> > \setkeys{Gin}{width=1\textwidth}
>> > \maketitle
>> > <<echo=F,results=hide>>=
>> > report <- structure(list(Date = c("3/12/2010", "3/13/2010", "3/14/2010",
>> > "3/15/2010"), Run1 = c("33 (119 ? 119)", "n (0 ? 0)", "893 (110 ? 146)",
>> > "140 (111 ? 150)"), Run2 = c("33 (71 ? 71)", "n (0 ? 0)",
>> > "337 (67 ? 74)", "140 (68 ? 84)"), Run3 = c("890 (32 ? 47)",
>> > "n (0 ? 0)", "10,602 (32 ? 52)", "2,635 (34 ? 66)"), Run4 = c("0 ( ? )",
>> > "n (0 ? 0)", "0 ( ? )", "0 ( ? )"), Run4 = c("0 ( ? )", "n (0 ? 0)",
>> > "0 ( ? )", "0 ( ? )")), .Names = c("ID_Date", "Run1", "Run2",
>> > "Run3", "Run4", "Run5"), row.names = c(NA, 4L), class = "data.frame")
>> > require(stringr)
>> > report <- t(apply(report, 1, function(x) {str_replace(x, "\\?", "-")}))
>> > #report
>> > #latex(report,file="")
>> > @
>> > \begin{landscape}
>> > \begin{table}[!tbp]
>> >  \begin{center}
>> >  \begin{tabular}{llllll}\hline\hline
>> > \multicolumn{1}{c}{\Sexpr{names(report)[1]}}   # Using \Sexpr here
>> > &\multicolumn{1}{c}{Run1}
>> > &\multicolumn{1}{c}{Run2}
>> > &\multicolumn{1}{c}{Run3}
>> > &\multicolumn{1}{c}{Run4}
>> > &\multicolumn{1}{c}{Run5}\tabularnewline
>> > \hline
>> > 1&3/12/2010&33 (119 ? 119)&33 (71 ? 71)&890 (32 ? 47)&0 ( ? )&0 ( ?
>> > )\tabularnewline
>> > 2&3/13/2010&n (0 ? 0)&n (0 ? 0)&n (0 ? 0)&n (0 ? 0)&n (0 ? 0)\tabularnewline
>> > 3&3/14/2010&893 (110 ? 146)&337 (67 ? 74)&10,602 (32 ? 52)&0 ( ? )&0 ( ?
>> > )\tabularnewline
>> > 4&3/15/2010&140 (111 ? 150)&140 (68 ? 84)&2,635 (34 ? 66)&0 ( ? )&0 ( ?
>> > )\tabularnewline
>> > \hline
>> > \end{tabular}
>> > \end{center}
>> > \end{table}
>> > \end{landscape}
>> > \end{document}
>> >
>> > Felipe D. Carrillo
>> > Supervisory Fishery Biologist
>> > Department of the Interior
>> > US Fish & Wildlife Service
>> > California, USA
>> >
>> >
>> >
>> > ----- Original Message ----
>> >> From: David Winsemius <dwinsemius at comcast.net>
>> >> To: Felipe Carrillo <mazatlanmexico at yahoo.com>
>> >> Cc: Duncan Murdoch <murdoch.duncan at gmail.com>; r-help at stat.math.ethz.ch
>> >> Sent: Mon, July 12, 2010 3:14:49 PM
>> >> Subject: Re: [R] How to select the column header with \Sexpr{}
>> >>
>> >>
>> >> On Jul 12, 2010, at 5:45 PM, Felipe Carrillo wrote:
>> >>
>> >> > Thanks for the quick reply Duncan.
>> >> > I don't think I have explained myself well, I have a dataset named
>>"report"
>> >>and
>> >> > my column headers are run1,run2,run3,run4 and so on.
>> >> >
>> >> > I know how to access the data below those columns with \Sexpr{report[1,1]}
>>&
>> >> > &\Sexpr{report[1,2]} and so on, but I can't access my column headers
>> >> > with \Sexpr{} because I can't find the way to reference run1,run2,run3
> and
>> >>run4.
>> >> > Sorry if I am not explain myself really well.
>> >>
>> >> Wouldn't this just be:
>> >>
>> >> \Sexpr{names(report)}  # ?  or perhaps you want specific items in that
>>vector?
>> >>
>> >> Sexpr{names(report)[1]}, Sexpr{names(report)[2]}, etc
>> >>
>> >> --David.
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > ----- Original Message ----
>> >> >> From: Duncan Murdoch <murdoch.duncan at gmail.com>
>> >> >> To: Felipe Carrillo <mazatlanmexico at yahoo.com>
>> >> >> Cc: r-help at stat.math.ethz.ch
>> >> >> Sent: Mon, July 12, 2010 2:18:15 PM
>> >> >> Subject: Re: [R] How to select the column header with \Sexpr{}
>> >> >>
>> >> >> On 12/07/2010 5:10 PM, Felipe Carrillo wrote:
>> >> >>> Hi:
>> >> >>> Since I work with a few different fish runs my column headers change
>> >> >> everytime
>> >> >>> I start a new Year. I have been using \Sexpr{} for my row and columns
>>and
>> >>now
>> >> >> I am trying to use with my report column headers. \Sexpr{1,1} is row 1
>> >>column 1,
>> >> >>> what can I use for headers? I tried \Sexpr{0,1} but sweave didn't like
>> >> >> it..Thanks in advance
>> >> >>> for any hints
>> >> >>>
>> >> >>
>> >> >> \Sexpr takes an R expression, and inserts the first element of the
> result
>> >>into
>> >> >> your text.  Using just "0,1" (not including the quotes) is not a valid R
>> >> >> expression.
>> >> >>
>> >> >> You need to use paste() or some other function to construct the label
> you
>> >>want
>> >> >> to put in place, e.g. \Sexpr{paste(0,1,sep=",")} will give you "0,1".
>> >> >>
>> >> >> Duncan Murdoch
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > ______________________________________________
>> >> > R-help at 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 at 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.
>> >
>>
>>
>>
>> --
>> Ista Zahn
>> Graduate student
>> University of Rochester
>> Department of Clinical and Social Psychology
>> http://yourpsyche.org
>>
>
>
>
>
> ______________________________________________
> R-help at 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.
>



-- 
Ista Zahn
Graduate student
University of Rochester
Department of Clinical and Social Psychology
http://yourpsyche.org



More information about the R-help mailing list