(I'm adding r-sig-geo to this thread)

Paul/Ashton,

I included your code, Paul; I also added the option (with the same 
argument name) to variogramLine so you can now also do e.g. a

variogramLine(vgm(1, "Sph", 1, anis=c(0, 0.5)), dir = 
c(1/sqrt(c(2,2)),0), dist_vector = c(0, 0.1, 0.5, 1, 2))

(that is, irregular distances at a given direction and anisotropic model)
--
Edzer


Paul Hiemstra wrote:
> Hi Ashton,
>
> I had the same problem and also tried your workaround. But the problem 
> that that is really slow. To get past this I delved into te C-source 
> code of gstat and reworked one of the C-functions to get what I 
> wanted. This solution works much faster (few orders of magnitude).
>
> In order to get this working you need to reinstall gstat with one 
> modified .c file (s.c, located in the src directory of the source 
> version of the gstat package). I added the modified .c file as an 
> attachment (hope that is possible on the mailing list). Once you 
> replaced s.c you install gstat to get the new C-function available. 
> The new C-function accepts a vector of distances as input and returns 
> a vector of gammas. An example providing an R-wrapper function:
>
> getGammas = function(dist_vector, varModel, covariance = FALSE) {
> # dist_vector is the input vector with distances
> # varModel is the variogram model
> # covariance is a logical to choose for semivariances (FALSE)
> # or for covariances (TRUE)
>   .Call("gstat_init", as.integer(0))
>    gstat:::load.variogram.model(varModel)
>    ret = .Call("get_covariance_list", as.integer(c(0,0)), 
> as.integer(covariance), as.numeric(dist_vector))[[2]]
>    .Call("gstat_exit", 0)
>   ret   }
> library(gstat)
> data(meuse)
> vgm1 <- variogram(log(zinc)~1, ~x+y, meuse)
> m = fit.variogram(vgm1, vgm(1,"Sph",300,1))
> getGammas(seq(1,1000, 100), varModel = m)
>
> It is experimental code but it works very well for me, much faster 
> than the workaround with variogramLine. Please let me know what you 
> think of this solution.
>
> cheers and hth,
> Paul
>
> Ashton Shortridge wrote:
>> I have a vector of lags for which I'd like to calculate covariances, 
>> given a variogram (covariance) model. variogramLines() almost seems 
>> to do this; however, it generates a table of distances and 
>> covariances for a sequence of values between user-specified min and 
>> max distances - the user can't pass a vector of h-values.
>>
>> I was hoping I could simply modify the R wrapper code for 
>> variogramLines to do what I wished, but it seems that the relevant 
>> code is called from elsewhere.
>>
>> My current workaround is to call variogramLines for each lag value, 
>> specifying an npoints of two. For example, using a vgm object for an 
>> omnidirectional variogram called testmod, and interested in the 
>> covariance for a distance of 15, I run:
>> gstat.covar <- variogramLine(testmod, 15, 2, covariance=TRUE)
>>
>> and then grab the second row in gstat.covar. This is tedious, and I'm 
>> guessing a better way is out there!
>>
>> Thanks for any help,
>>
>> Ashton
>>
>>
>>   
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Gstat-info mailing list
> [EMAIL PROTECTED]
> http://mailman.geo.uu.nl/mailman/listinfo/gstat-info

-- 
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/


        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to