Hi,

In addition to using paste(), you can also try this:
dat1<-data.frame(ID=formatC(0001:0010,width=4,flag="0"),No_of_Effectors=rep(3,10))
dat1<-within(dat1,{ID<-as.character(ID)})
list1<-lapply(1:nrow(dat1),function(x) sample(1:10000,3,replace=TRUE))
dat2<-data.frame(dat1,Effectors=I(list1))
 str(dat2)
#'data.frame':    10 obs. of  3 variables:
# $ ID             : chr  "0001" "0002" "0003" "0004" ...
# $ No_of_Effectors: num  3 3 3 3 3 3 3 3 3 3
# $ Effectors      :List of 10
 # ..$ : int  6155 979 3079
  #..$ : int  690 5515 9469
 # ..$ : int  903 7439 7582
  #..$ : int  9788 5930 7456
  #..$ : int  8106 8319 2396
  #..$ : int  8050 5299 264
  #..$ : int  5558 7401 8865
  #..$ : int  7178 7273 4065
  #..$ : int  2135 75 7571
  #..$ : int  6652 9900 2313
  #..- attr(*, "class")= chr "AsIs"
head(dat2)
#    ID No_of_Effectors    Effectors
#1 0001               3 6155, 97....
#2 0002               3 690, 551....
#3 0003               3 903, 743....
#4 0004               3 9788, 59....
#5 0005               3 8106, 83....
#6 0006               3 8050, 52....


BTW, I had a line of code in my previous reply which was not required and it 
will not work.  


#list1<-lapply(1:nrow(dat1),function(x) 
paste(sample(1:10000,3,replace=TRUE)),sep=",")
A.K.





----- Original Message -----
From: Benjamin Ward (ENV) <b.w...@uea.ac.uk>
To: "r-help@r-project.org" <r-help@r-project.org>
Cc: 
Sent: Sunday, October 28, 2012 5:32 AM
Subject: [R] Having some Trouble Data Structures

Hi All,

I'm trying to run a simulation of host-pathogen evolution based around 
individuals.
What I need to have is a dataframe or table of some description - describing 
all the individuals of a pathogen population (so far I've implemented this as a 
matrix):

         ID         No_of_Effectors                   Effectors (Sequences)
  [1,] 0001              3                   ##   3 Random Numbers ##

There will be many such rows for many individuals. They have something called 
effectors, the number of which is randomly generated, so say you get 3 in the 
No_of_Effectors column. Then I make R generate 3 numbers from between 1 and 
10,000, this gives me three numerical representations of genes. These numbers 
will be compared to a similar data structure of the host individuals who have 
their immune genes with similar numbers.

My problem is that obviously I can't stick 3 numbers in one "cell" of the 
matrix (I've tried) :

Pathogen_Individuals[1,3] <- c(2,3,4)
Error in Pathogen_Individuals[1, 3] <- c(345, 567, 678) :
  number of items to replace is not a multiple of replacement length

In future I'm also going to have more variables such as whether a gene is 
expressed. Such information may require a matrix in itself - something like:


        Effector ID             Sequence                  Expressed?
  [1,]     0001              345,567,678                       1 (or 0).

Is there a way then I can put more than one value in the cell like a list of 
values, or a way to put objects in a cell of a data frame, matrix or table etc. 
Almost an inception deal - data structures nested in a data structure? If I 
search for things like "insert list into matrix" I get results like how to turn 
one into another, which is not what I think I need to be doing.

I have been considering having several data structures not nested in each 
other, something like for every individual create a new matrix object with the 
name Effectors_[Individual_ID] and some how get my simulation loops operating 
on those objects but I find it hard to see how to tell R all of those matrices 
are to be included in an operation, as you can all lines of a data frame for 
example with for loops.
This is strange for me because this model was written in a macro-code for 
another program which handles data in a different format and layout to R.

My problem is I think, each individual in the model has many variables - in 
this case representations of genes. So I'm having trouble getting my head about 
this.

Hopefully someone more experienced will be able to offer advice or a solution, 
it will be very appreciated.

Many Thanks,
Ben Ward (ENV, UEA & The Sainsbury Lab, JIC).

P.S. I have searched previous queries to the list, and I'm not sure but this 
may be useful for relevant:


Have you thought of using a list?

> a <- matrix(1:10, nrow=2)
> b <- 1:5
> x <- list(a=a, b=b)
> x
$a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

$b
[1] 1 2 3 4 5

> x$a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> x$b
[1] 1 2 3 4 5

oliveoil and yarn datasets have been mentioned.





    [[alternative HTML version deleted]]

______________________________________________
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.


______________________________________________
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.

Reply via email to