[R] unwanted coercion using apply

David Winsemius dwinsemius at comcast.net
Sun May 22 21:43:35 CEST 2011


On May 22, 2011, at 3:40 PM, David Winsemius wrote:

>
> On May 22, 2011, at 2:11 AM, Jeroen Ooms wrote:
>
>> I need to convert a dataframe to a record-structure, to be able to  
>> encode it
>> later in JSON. Suppose this is the data:
>>
>> mydata <- data.frame(foo=1:3, bar=c("M","M","F"));
>>
>> I would like to convert this to a unnamed list (json array) of key- 
>> value
>> pairs. For example like this:
>>
>> apply(data.frame(foo=1:3, bar=c("M","M","F")),1,as.list)
>>
>> However, when I do this, all the numeric values are converted to  
>> strings. I
>> don't understand why this is, because when I try to convert one  
>> record
>> simulataniously, this does not happen:
>>
>> as.list(mydata[1,]);
>>
>> I am not sure if this is indended behaviour or not, but is there an  
>> elegant
>> way to apply 'as.list' to all of the dataframe rows without coercing
>> everything to strings?
>
> ?pairlist
>
> pairlist( letters[1:3], 1:3)
>
I meant to preface that by noting that your dataframe has a factor  
column and I suspect you want it to be "character", so:

  ydata <- data.frame(foo=1:3, bar=c("M","M","F"),  
stringsAsFactors=FALSE)
>
> pairlist(mydata$bar, ydata$foo)  # assuming the numbers were values  
> for letter names.


-- 
David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list