[R] problems with character objects and calls to list()

Neil Shephard nshephard at gmail.com
Mon Jul 23 16:50:39 CEST 2007

Hi All,

I have a problem trying to get a set of columns recognised as a list
and can't work out how to do it despite trawling through the mailing
list archives, and docs.

A short example...

to.convert <- NULL
n <- 6
for(x in 1:n){
  to.convert <- paste(to.convert, paste((2 * x) -1, (2 * x), sep=":"), sep=",")
to.convert <- gsub("^,", "", to.convert)
[1] "character"
## This is the problem....
[1] "1:2,3:4,5:6"

Really I'd like the call to list() to behave as though the text had
been entered directly so that you get....

> list(1:2, 3:4, 5:6)
[1] 1 2

[1] 3 4

[1] 5 6

But how do I get the quote's that surround to.convert removed, given
that it is an object of type character?

Thanks in advance,



This is a refined example from a larger problem that I'm working on.
Given a data frame of pairs of columns containing genotype data I
would like to convert them to genotype objects using makeGenotypes.
The number of loci (i.e. ncol() / 2) is variable, so I like to be able
to determine how many loci there are and then convert all of them.

Thus an example data set would be...

<-----Start test.dat------>
<-----End test.dat----->

I'd then like to read in and convert as follows...

genotype <-read.csv("test.dat")
genotype <- genotype[,-1]    ## Removes ID column
n.loci <- ncol(genotype) / 2  ## Calcualtes how many loci
## Build a list of the pairs of columns
to.convert <-NULL
for(x in 1:n.loci){
  to.convert <- paste(to.convert, paste((2 * x) -1, (2 * x), sep=":"), sep=",")
to.convert <- gsub("^,", "", to.convert)
## Then convert to genotype object, but get errors...
genotype2 <- makeGenotypes(genotype, convert=list(to.convert))
Error in makeGenotypes(genotype, convert = list(to.convert)) :
	When convert is a list, each element must be a 2-vector.
## I've also tried giving the column names but the data disappears
genotype2 <- makeGenotypes(genotype, convert=c(colnames(genotype))
  rs1.1 rs1.2 rs2.1 rs2.2 rs3.1 rs3.2 rs4.1 rs4.2 rs5.1 rs5.2 rs6.1 rs6.2
1  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
2  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
3  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
4  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
## What I would like to happen is demonstrated by...
genotype2 <- makeGenotypes(genotype, convert=c(1:2,3:4,5:6,7:8,9:10,11:12))
  rs1.1/rs1.2 rs2.1/rs2.2 rs3.1/rs3.2 rs4.1/rs4.2 rs5.1/rs5.2 rs6.1/rs6.2
1         1/1         1/2         1/1         2/2         1/2         1/1
2         2/1         1/2         1/2         2/1         1/2         2/1
3         2/1         1/2         1/1        <NA>         1/2         2/2
4         2/2         1/1         2/2         2/2         1/1         2/2

In the above the data has been converted to genotypes.

"In mathematics you don't understand things. You just get used to
them."  - Johann von Neumann

Email - nshephard at gmail.com / n.shephard at sheffield.ac.uk
Website - http://slack.ser.man.ac.uk/
Photos - http://www.flickr.com/photos/slackline/

More information about the R-help mailing list