[R] lapply getting names of the list

David Winsemius dwinsemius at comcast.net
Thu Dec 9 20:44:32 CET 2010


On Dec 9, 2010, at 2:21 PM, David Winsemius wrote:

>
> On Dec 9, 2010, at 12:44 PM, Sashi Challa wrote:
>
>> Hello All,
>>
>> I have a toy dataframe like this. It has 8 columns separated by tab.
>>
>> Name    SampleID        Al1     Al2     X       Y       R       Th
>> rs191191        A1      A       B       0.999   0.09    0.78    0.090
>> abc928291       A1      B       J       0.3838  0.3839  0.028   0.888
>> abcnab  A1      H       K       0.3939  0.939   0.3939  0.77
>> rx82922 B1      J       K       0.3838  0.393   0.393   0.00
>> rcn3939 B1      M       O       0.000   0.000   0.000   0.77
>> tcn39399        B1      P       I       0.393   0.393   0.393   0.56

Those were not tabs after being processed by various portions of the  
various mail systems.


>>
>> Note that the SampleID is repeating. So I want to be able to split  
>> the dataset based on the SampleID and write the splitted dataset of  
>> every SampleID into a new file.
>> I tried split followed by lapply to do this.
>>
>> infile <- read.csv("test.txt", sep="\t", as.is = TRUE, header = TRUE)
>> infile.split  <- split(infile, infile$SampleID)
>> names(infile.split[1])  ## outputs “A1”
>> ## now A1, B1 are two lists in infile.split as I understand it.  
>> Correct me if I am wrong.
>>
>>

See if this works any better:

lapply(infile.split,function(x){
             filename <- deparse(substitute(x))   # this is the way to  
recover the "names" of arguments
             final_filename <- paste(filename,"toy_set.txt", sep="_")
             write.table(x, file = paste("", final_filename,sep="/"),  
row.names=FALSE, quote=FALSE,sep="\t")
} )


I substituted "" for that path variable that you didn't provide, put  
in a missing ")" in the write.table file=paste() that wasmissing,  and  
I substituted regular double quotes for those damnable smart-quotes  
that _your_ mailer inserted.

-- 
David
>>
>> In lapply I wanted to give a unique filename to all the split  
>> Sample Ids, i.e. name them here as <dragged to the c() construct>.
>> How do I get those names, i.e. A1, B1 to a create a filename like  
>> above.
>
> names(file.split) <- c("A1_toy_set.txt", "B1_toy_set_txt")
>
>> When I write each of the element in the list obtained after split  
>> into a file,
>
> How are you proposing do do this "writing"?
>
>> the column names would have names like A1.Name, A1.SampleID,  
>> A1.Al1, …..
>
> Are you sure? Why would you think that?
>
> -- 
> David.
>
>> Can I get rid of “A1” in the column names within the lapply (other  
>> than reading in the file again and changing the names) ?
>>
>> Thanks for your time,
>>
>> Regards
>> Sashi
>>
>>
>> 	[[alternative HTML version deleted]]
>>
>> ______________________________________________
>> 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list