Chel Hee Lee
2015-Jan-20 15:48 UTC
[R] add a list name into the list content in a new output
Hi Joshua,
You may use 'do.call()'. Please see the output in below:
> result <- lapply(names(op), function(x){
+ col1 <- x
+ col2 <- row.names(op[[x]])
+ mat <- op[[x]]
+ row.names(mat) <- NULL
+ rval <- cbind(col1, col2, mat)
+ names(rval) <- c("trait", "locus", names(mat))
+ rval
+ })
> result
[[1]]
trait locus chr pos ci.low ci.high lod
1 bp c7.loc45 7 47.7 36.71 56.7 6.11
2 bp c15.loc8 15 12.0 3.96 22.8 5.29
[[2]]
trait locus chr pos ci.low ci.high lod
1 hr c2.loc54 2 59.8 14.8 87.8 4.19
2 hr D15MIT184 15 22.8 12.0 36.0 3.15
[[3]]
trait locus chr pos ci.low ci.high lod
1 bw c15.loc16 15 20 11 30 6.75
[[4]]
trait locus chr pos ci.low ci.high lod
1 heart_wt c12.loc49 12 51.2 28.2 62.2 3.65
> do.call(rbind, result)
trait locus chr pos ci.low ci.high lod
1 bp c7.loc45 7 47.7 36.71 56.7 6.11
2 bp c15.loc8 15 12.0 3.96 22.8 5.29
3 hr c2.loc54 2 59.8 14.80 87.8 4.19
4 hr D15MIT184 15 22.8 12.00 36.0 3.15
5 bw c15.loc16 15 20.0 11.00 30.0 6.75
6 heart_wt c12.loc49 12 51.2 28.20 62.2 3.65
>
Is this what you are looking for? I hope this helps.
Chel Hee Lee
On 1/20/2015 9:23 AM, Shuhua Zhan wrote:> Hi Chel,
> Thank you very much for your help!
> I'm sorry I did not post my wanted output correctly. I only want the
colnames of the data frame occur once as a table:
> trait locus chr pos ci.low ci.high lod
> bp c7.loc45 7 47.7 36.71 56.7 6.11
> bp c15.loc8 15 12.0 3.96 22.8 5.29
> hr c2.loc54 2 59.8 14.8 87.8 4.19
> hr D15MIT184 15 22.8 12.0 36.0 3.15
> bw c15.loc16 15 20 11 30 6.75
> heart_wt c12.loc49 12 51.2 28.2 62.2 3.65
> How to add command to your script to scape those colnames?
> Thanks again,
> Joshua
>
> ----- Original Message -----
> From: "Chel Hee Lee" <chl948 at mail.usask.ca>
> To: "Shuhua Zhan" <szhan at uoguelph.ca>,
"r-help" <r-help at r-project.org>
> Sent: Monday, January 19, 2015 10:44:23 PM
> Subject: Re: [R] add a list name into the list content in a new output
>
> I am just using the first two components of your output.
>
> > op
> $bp
> chr pos ci.low ci.high lod
> c7.loc45 7 47.7 36.71 56.7 6.11
> c15.loc8 15 12.0 3.96 22.8 5.29
>
> $hr
> chr pos ci.low ci.high lod
> c2.loc54 2 59.8 14.8 87.8 4.19
> D15MIT184 15 22.8 12.0 36.0 3.15
>
> >
> > result <- lapply(names(op), function(x){
> + col1 <- x
> + col2 <- row.names(op[[x]])
> + mat <- op[[x]]
> + row.names(mat) <- NULL
> + rval <- cbind(col1, col2, mat)
> + names(rval) <- c("trait", "locus", names(mat))
> + rval
> + })
> >
> > result
> [[1]]
> trait locus chr pos ci.low ci.high lod
> 1 bp c7.loc45 7 47.7 36.71 56.7 6.11
> 2 bp c15.loc8 15 12.0 3.96 22.8 5.29
>
> [[2]]
> trait locus chr pos ci.low ci.high lod
> 1 hr c2.loc54 2 59.8 14.8 87.8 4.19
> 2 hr D15MIT184 15 22.8 12.0 36.0 3.15
>
> >
>
> Is this what you are looking for? I hope this helps.
>
> Chel Hee Lee
>
>
> On 01/19/2015 02:14 PM, Shuhua Zhan wrote:
>> Dear All,
>> I'd like to add a list name into the list contents to make a new
output. The list is a list of data.frame derived from summary command in Rqtl. I
want to add this list name to the data frame with a given column name such as
"trait" and output this entire list as a table tab delimited as below.
>> Here is the list generated by summary command in Rqtl:
>>> summary(out.all, threshold=3, format="tabByCol")
>> bp:
>> chr pos ci.low ci.high lod
>> c7.loc45 7 47.7 36.71 56.7 6.11
>> c15.loc8 15 12.0 3.96 22.8 5.29
>>
>> hr:
>> chr pos ci.low ci.high lod
>> c2.loc54 2 59.8 14.8 87.8 4.19
>> D15MIT184 15 22.8 12.0 36.0 3.15
>>
>> bw:
>> chr pos ci.low ci.high lod
>> c15.loc16 15 20 11 30 6.75
>>
>> heart_wt:
>> chr pos ci.low ci.high lod
>> c12.loc49 12 51.2 28.2 62.2 3.65
>>
>>
>> The new output I want:
>>
>> trait locus chr pos ci.low ci.high lod
>> bp c7.loc45 7 47.7 36.71 56.7 6.11
>> bp c15.loc8 15 12.0 3.96 22.8 5.29
>>
>> trait locus chr pos ci.low ci.high lod
>> hr c2.loc54 2 59.8 14.8 87.8 4.19
>> hr D15MIT184 15 22.8 12.0 36.0 3.15
>>
>> trait locus chr pos ci.low ci.high lod
>> bw c15.loc16 15 20 11 30 6.75
>>
>> heart_wt locus chr pos ci.low ci.high lod
>> trait c12.loc49 12 51.2 28.2 62.2 3.65
>>
>> I appreciate for your help for any suggestions!!
>> Joshua
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
>>
Hi Joshua,
Chel Hee Lee is correct, you can use rbind. Here is a slight
modification of the script I sent before.
reshape_Rqtl<-function(x) {
newx<-list()
for(dfi in 1:length(x)) {
lenxdfi<-length(x[[dfi]])
x[[dfi]]$trait<-names(x)[dfi]
x[[dfi]]$locus<-rownames(x[[dfi]])
rownames(x[[dfi]])<-NULL
newx<-rbind(newx,x[[dfi]][c(lenxdfi+1,lenxdfi+2,1:lenxdfi)])
}
return(newx)
}
reshape_Rqtl(out.all)
and here is a variation using lapply as in Chel Hee Lee's version (a
bit neater than mine)
reshape_Rqtl<-function(x) {
trait<-rep(names(x),unlist(lapply(x,function(y) dim(y)[1])))
locus<-unlist(lapply(out.all,rownames))
newx<-cbind(trait,locus,x)
rownames(newx)<-NULL
newx<-do.call(newx,rbind)
return(newx)
}
display_Rqtl_out(out.all)
Jim
On Wed, Jan 21, 2015 at 2:48 AM, Chel Hee Lee <chl948 at mail.usask.ca>
wrote:> Hi Joshua,
>
> You may use 'do.call()'. Please see the output in below:
>
>> result <- lapply(names(op), function(x){
> + col1 <- x
> + col2 <- row.names(op[[x]])
> + mat <- op[[x]]
> + row.names(mat) <- NULL
> + rval <- cbind(col1, col2, mat)
> + names(rval) <- c("trait", "locus", names(mat))
> + rval
> + })
>> result
> [[1]]
> trait locus chr pos ci.low ci.high lod
> 1 bp c7.loc45 7 47.7 36.71 56.7 6.11
> 2 bp c15.loc8 15 12.0 3.96 22.8 5.29
>
> [[2]]
> trait locus chr pos ci.low ci.high lod
> 1 hr c2.loc54 2 59.8 14.8 87.8 4.19
> 2 hr D15MIT184 15 22.8 12.0 36.0 3.15
>
> [[3]]
> trait locus chr pos ci.low ci.high lod
> 1 bw c15.loc16 15 20 11 30 6.75
>
> [[4]]
> trait locus chr pos ci.low ci.high lod
> 1 heart_wt c12.loc49 12 51.2 28.2 62.2 3.65
>
>> do.call(rbind, result)
> trait locus chr pos ci.low ci.high lod
> 1 bp c7.loc45 7 47.7 36.71 56.7 6.11
> 2 bp c15.loc8 15 12.0 3.96 22.8 5.29
> 3 hr c2.loc54 2 59.8 14.80 87.8 4.19
> 4 hr D15MIT184 15 22.8 12.00 36.0 3.15
> 5 bw c15.loc16 15 20.0 11.00 30.0 6.75
> 6 heart_wt c12.loc49 12 51.2 28.20 62.2 3.65
>>
>
> Is this what you are looking for? I hope this helps.
>
> Chel Hee Lee
>
> On 1/20/2015 9:23 AM, Shuhua Zhan wrote:
>>
>> Hi Chel,
>> Thank you very much for your help!
>> I'm sorry I did not post my wanted output correctly. I only want
the
>> colnames of the data frame occur once as a table:
>> trait locus chr pos ci.low ci.high lod
>> bp c7.loc45 7 47.7 36.71 56.7 6.11
>> bp c15.loc8 15 12.0 3.96 22.8 5.29
>> hr c2.loc54 2 59.8 14.8 87.8 4.19
>> hr D15MIT184 15 22.8 12.0 36.0 3.15
>> bw c15.loc16 15 20 11 30 6.75
>> heart_wt c12.loc49 12 51.2 28.2 62.2 3.65
>> How to add command to your script to scape those colnames?
>> Thanks again,
>> Joshua
>>
>> ----- Original Message -----
>> From: "Chel Hee Lee" <chl948 at mail.usask.ca>
>> To: "Shuhua Zhan" <szhan at uoguelph.ca>,
"r-help" <r-help at r-project.org>
>> Sent: Monday, January 19, 2015 10:44:23 PM
>> Subject: Re: [R] add a list name into the list content in a new output
>>
>> I am just using the first two components of your output.
>>
>> > op
>> $bp
>> chr pos ci.low ci.high lod
>> c7.loc45 7 47.7 36.71 56.7 6.11
>> c15.loc8 15 12.0 3.96 22.8 5.29
>>
>> $hr
>> chr pos ci.low ci.high lod
>> c2.loc54 2 59.8 14.8 87.8 4.19
>> D15MIT184 15 22.8 12.0 36.0 3.15
>>
>> >
>> > result <- lapply(names(op), function(x){
>> + col1 <- x
>> + col2 <- row.names(op[[x]])
>> + mat <- op[[x]]
>> + row.names(mat) <- NULL
>> + rval <- cbind(col1, col2, mat)
>> + names(rval) <- c("trait", "locus",
names(mat))
>> + rval
>> + })
>> >
>> > result
>> [[1]]
>> trait locus chr pos ci.low ci.high lod
>> 1 bp c7.loc45 7 47.7 36.71 56.7 6.11
>> 2 bp c15.loc8 15 12.0 3.96 22.8 5.29
>>
>> [[2]]
>> trait locus chr pos ci.low ci.high lod
>> 1 hr c2.loc54 2 59.8 14.8 87.8 4.19
>> 2 hr D15MIT184 15 22.8 12.0 36.0 3.15
>>
>> >
>>
>> Is this what you are looking for? I hope this helps.
>>
>> Chel Hee Lee
>>
>>
>>
>> On 01/19/2015 02:14 PM, Shuhua Zhan wrote:
>>>
>>> Dear All,
>>> I'd like to add a list name into the list contents to make a
new output.
>>> The list is a list of data.frame derived from summary command in
Rqtl. I
>>> want to add this list name to the data frame with a given column
name such
>>> as "trait" and output this entire list as a table tab
delimited as below.
>>> Here is the list generated by summary command in Rqtl:
>>>>
>>>> summary(out.all, threshold=3, format="tabByCol")
>>>
>>> bp:
>>> chr pos ci.low ci.high lod
>>> c7.loc45 7 47.7 36.71 56.7 6.11
>>> c15.loc8 15 12.0 3.96 22.8 5.29
>>>
>>> hr:
>>> chr pos ci.low ci.high lod
>>> c2.loc54 2 59.8 14.8 87.8 4.19
>>> D15MIT184 15 22.8 12.0 36.0 3.15
>>>
>>> bw:
>>> chr pos ci.low ci.high lod
>>> c15.loc16 15 20 11 30 6.75
>>>
>>> heart_wt:
>>> chr pos ci.low ci.high lod
>>> c12.loc49 12 51.2 28.2 62.2 3.65
>>>
>>>
>>> The new output I want:
>>>
>>> trait locus chr pos ci.low ci.high lod
>>> bp c7.loc45 7 47.7 36.71 56.7 6.11
>>> bp c15.loc8 15 12.0 3.96 22.8 5.29
>>>
>>> trait locus chr pos ci.low ci.high lod
>>> hr c2.loc54 2 59.8 14.8 87.8 4.19
>>> hr D15MIT184 15 22.8 12.0 36.0 3.15
>>>
>>> trait locus chr pos ci.low ci.high lod
>>> bw c15.loc16 15 20 11 30 6.75
>>>
>>> heart_wt locus chr pos ci.low ci.high lod
>>> trait c12.loc49 12 51.2 28.2 62.2 3.65
>>>
>>> I appreciate for your help for any suggestions!!
>>> Joshua
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more,
see
>>> 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 at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.