[R-sig-Geo] bug in process definition for retrieving point pair indexes from varigramCloud

Edzer Pebesma edzer.pebesma at uni-muenster.de
Sun Feb 28 20:24:33 CET 2010



Mark Connolly wrote:
> Does .BigInt always exist and always contain the appropriate divisor 
> regardless of the architecture?  If not, does it exist _only_ for 
> 64-bit architectures?
It always exists, and gives the right number for division - platform 
dependent. Using a system constant wouldn't make the object portable 
across architectures, assuming someone would want to do this of course.
>
> Is the result of the operation always an offset, regardless of the 
> architecture?  (I am presuming yes, but I don't have access to a 
> 32-bit machine right now).
Yes. (It is 2^16 on 32 bits machines)
>
> If I am writing R code to extract left and right appropriately, I'd 
> like to make sure it is portable across architectures.  I am presuming 
> that this is the best way to get left and right.  Capturing the 
> results of print(variogramCloud) seems kludgy.
> Better method than both of these available?
Update your gstat package; the newer has an as.data.frame.variogramCloud 
method, which avoids this kludge; just do an

as.data.frame(obj)
>
>
> On 02/28/2010 10:37 AM, Edzer Pebesma wrote:
>> Well, they're called first and second, and a bit later they're named 
>> "left" and "right", it nowhere says that "left" is first, or second.
>>
>> As you say, there's little point in making the distinction anyway; 
>> give me a case where it is confusing and I'll change it.
>> -- 
>> Edzer
>>
>> Mark Connolly wrote:
>>> Thanks.  That works better.
>>>
>>> It looks as though the documentation has left and right (implicitly) 
>>> switched?  I am drawing line segments in 3D space using rgl, and I 
>>> don't care so much about the order.  Might be confusing in some cases.
>>>
>>>
>>> On 02/28/2010 09:49 AM, Edzer Pebesma wrote:
>>>> Mark, the documentation falsely assumes all computers have 32 bits 
>>>> integers; yours seems not -- compare the .BigInt with sqrt(2^64). 
>>>> To see how the point pairs are obtained, look at:
>>>>
>>>> > gstat:::as.data.frame.variogramCloud
>>>> function (x, row.names, optional, ...)
>>>> {
>>>>    .BigInt = attr(x, ".BigInt")
>>>>    x$left = x$np%%.BigInt + 1
>>>>    x$right = x$np%/%.BigInt + 1
>>>>    x$np = NULL
>>>>    class(x) = "data.frame"
>>>>    x
>>>> }
>>>>
>>>> so the .BigInt attribute is the divisor; 1 is added because the 
>>>> arrays are set up in the C code, starting at 0.
>>>> -- 
>>>> Edzer
>>>>
>>>> Mark Connolly wrote:
>>>>> gstat reference states
>>>>>
>>>>> If cloud is TRUE: an object of class variogramCloud, with the 
>>>>> field np encoding the numbers of the point pair that contributed 
>>>>> to a variogram cloud estimate, as follows. The first point is 
>>>>> found by the integer division of np by 2^16, the second point by 
>>>>> the remainder of that division.
>>>>>
>>>>> For
>>>>> Classes ‘variogramCloud’ and 'data.frame': 3275 obs. of 6 variables:
>>>>> $ np : num 8.59e+09 8.00 8.59e+09 1.29e+10 1.29e+10 ...
>>>>> $ dist : num 18.8 79.2 77.8 78.7 100.1 ...
>>>>> $ gamma : num 0.781 0.845 12.903 5.611 0.344 ...
>>>>> $ dir.hor: num 0 0 0 0 0 0 0 0 0 0 ...
>>>>> $ dir.ver: num 0 0 0 0 0 0 0 0 0 0 ...
>>>>> $ id : Factor w/ 1 level "var1": 1 1 1 1 1 1 1 1 1 1 ...
>>>>> - attr(*, "direct")='data.frame': 1 obs. of 2 variables:
>>>>> ..$ id : Factor w/ 1 level "var1": 1
>>>>> ..$ is.direct: logi TRUE
>>>>> - attr(*, ".BigInt")= num 4.29e+09
>>>>>
>>>>>
>>>>> v[1,] yields:
>>>>> dist gamma dir.hor dir.ver id left right
>>>>> 1 18.75474 0.78125 0 0 var1 6 3
>>>>>
>>>>>
>>>>> v$np[1] %/% 2^16 yields:
>>>>> 131072
>>>>>
>>>>> Which is != 6
>>>>>
>>>>> Am I misinterpreting the documentation?
>>>>>
>>>>
>>>
>>>
>>
>
>

-- 
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster 
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251 
8333081, Fax: +49 251 8339763  http://ifgi.uni-muenster.de 
http://www.52north.org/geostatistics      e.pebesma at wwu.de



More information about the R-sig-Geo mailing list