[R] Populating then sorting a matrix and/or data.frame

Noah Silverman noah at smartmediacorp.com
Fri Nov 12 00:33:42 CET 2010


Your errors look exactly like mine.

Changing the option flag does allow me to create the data.frame without
any errors.  A quick look confirms that all the values are there and
correct.

However, R has coerced all of my numeric values to strings. 

Using your sample code also turns all the numeric values to strings. 
Perhaps it has something to do with the way R in interpreting the first
column?

Thanks!

-N



On 11/11/10 1:59 PM, William Dunlap wrote:
> You are right, I mistyped it.
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com  
>
>> -----Original Message-----
>> From: John Kane [mailto:jrkrideau at yahoo.ca] 
>> Sent: Thursday, November 11, 2010 1:58 PM
>> To: Peter Langfelder; r-help at r-project.org; William Dunlap
>> Subject: Re: [R] Populating then sorting a matrix and/or data.frame
>>
>>
>>
>> --- On Thu, 11/11/10, William Dunlap <wdunlap at tibco.com> wrote:
>>
>>> From: William Dunlap <wdunlap at tibco.com>
>>> Subject: Re: [R] Populating then sorting a matrix and/or data.frame
>>> To: "Peter Langfelder" <peter.langfelder at gmail.com>, 
>> r-help at r-project.org
>>> Received: Thursday, November 11, 2010, 4:19 PM
>>> Peter,
>>>
>>> Your example doesn't work for me unless I
>>> set options(stringsAsFactors=TRUE) first.
>>
>> Don't you mean stringsAsFactors=FALSE here?  At least I get 
>> the same results you do but with stringsAsFactors=FALSE  The 
>> TRUE condition is giving multiple NAs and error messages
>>
>>
>>
>>
>>
>>> (If I do set that, then all columns of 'results'
>>> have class "character", which I doubt the user
>>> wants.)
>>>
>>>> results <- data.frame()
>>>>
>>>> n = 10
>>>> for(i in 1:n){
>>> +    a = LETTERS[i];
>>> +    b = i;
>>> +    c = 3*i + 2
>>> +    d = rnorm(1);
>>> +    results <- rbind(results, c(a,b,c,d))
>>> + }
>>> There were 36 warnings (use warnings() to see them)
>>>> warnings()[1:5]
>>> $`invalid factor level, NAs generated`
>>> `[<-.factor`(`*tmp*`, ri, value = "B")
>>>
>>> $`invalid factor level, NAs generated`
>>> `[<-.factor`(`*tmp*`, ri, value = "2")
>>>
>>> $`invalid factor level, NAs generated`
>>> `[<-.factor`(`*tmp*`, ri, value = "8")
>>>
>>> $`invalid factor level, NAs generated`
>>> `[<-.factor`(`*tmp*`, ri, value = "-0.305558353507095")
>>>
>>> $`invalid factor level, NAs generated`
>>> `[<-.factor`(`*tmp*`, ri, value = "C")
>>>
>>>> results
>>>    X.A. X.1. X.5. X.1.43055780028799.
>>> 1     A    1   
>>> 5    1.43055780028799
>>> 2  <NA> <NA> <NA>   
>>>             <NA>
>>> 3  <NA> <NA> <NA>   
>>>             <NA>
>>> 4  <NA> <NA> <NA>   
>>>             <NA>
>>> 5  <NA> <NA> <NA>   
>>>             <NA>
>>> 6  <NA> <NA> <NA>   
>>>             <NA>
>>> 7  <NA> <NA> <NA>   
>>>             <NA>
>>> 8  <NA> <NA> <NA>   
>>>             <NA>
>>> 9  <NA> <NA> <NA>   
>>>             <NA>
>>> 10 <NA> <NA> <NA>     
>>>           <NA>
>>>
>>> Bill Dunlap
>>> Spotfire, TIBCO Software
>>> wdunlap tibco.com  
>>>
>>>> -----Original Message-----
>>>> From: r-help-bounces at r-project.org
>>>> [mailto:r-help-bounces at r-project.org]
>>> On Behalf Of Peter Langfelder
>>>> Sent: Thursday, November 11, 2010 12:25 PM
>>>> To: Noah Silverman
>>>> Cc: r-help at r-project.org
>>>> Subject: Re: [R] Populating then sorting a matrix
>>> and/or data.frame
>>>> On Thu, Nov 11, 2010 at 11:33 AM, Noah Silverman
>>>> <noah at smartmediacorp.com>
>>> wrote:
>>>>> Still doesn't work.
>>>>>
>>>>> When using rbind to build the data.frame, it get
>>> a 
>>>> structure mostly full of
>>>>> NA.
>>>>> The data is correct, so something about pushing
>>> into the 
>>>> data.frame is
>>>>> breaking.
>>>>>
>>>>> Example code:
>>>>> results <- data.frame()
>>>>>
>>>>> for(i in 1:n){
>>>>>    #do all the work
>>>>>    #a is a test label. b,c,d are numeric.
>>>>>    results <- rbind(results, c(a,b,c,d))
>>>>> }
>>>> Works for me:
>>>>
>>>> results <- data.frame()
>>>>
>>>> n = 10
>>>> for(i in 1:n){
>>>>     a = LETTERS[i];
>>>>     b = i;
>>>>     c = 3*i + 2
>>>>     d = rnorm(1);
>>>>     results <- rbind(results, c(a,b,c,d))
>>>> }
>>>>
>>>>
>>>>> results
>>>>     X.A. X.1. X.5. X.0.142223304589023.
>>>> 1     A    1 
>>>   5    0.142223304589023
>>>> 2     B    2 
>>>   8    0.243612305595176
>>>> 3     C   
>>> 3   11    0.476795513990516
>>>> 4     D   
>>> 4   14      1.0278220664213
>>>> 5     E   
>>> 5   17    0.916608672305205
>>>> 6     F   
>>> 6   20 
>>>    1.61075985995586
>>>> 7     G   
>>> 7   23    0.370423691258896
>>>> 8     H   
>>> 8   26  -0.0528603547004191
>>>> 9     I   
>>> 9   29    -2.07888666920403
>>>> 10   
>>> J   10   32   
>>> -1.87980721733655
>>>> Maybe there's something wrong with the calculation you
>>> do?
>>>> Peter
>>>>
>>>> ______________________________________________
>>>> 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.
>>> ______________________________________________
>>> 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.
>>>
>>
>>
> ______________________________________________
> 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.



More information about the R-help mailing list