代码之家  ›  专栏  ›  技术社区  ›  Roman LuÅ¡trik

值没有被复制到下一个(本地)环境?

  •  1
  • Roman LuÅ¡trik  · 技术社区  · 14 年前

    考虑以下输出 browser() 位于内部的 calcDistance :

    Called from: calcDistance(object = rst, xy = xy[[i]][j, ], effect.distance = effect.distance)
    Browse[1]> ls.str()
    effect.distance :  num 236
    object : Formal class 'RasterLayer' [package "raster"] with 12 slots
    xy :  Named num [1:2] -101.8 35.5
    
    Browse[1]> 
    debugging in: xyValues(object = object, xy = xy, buffer = effect.distance)
    debug: standardGeneric("xyValues")
    
    Browse[2]> ls.str()
    object : Formal class 'RasterLayer' [package "raster"] with 12 slots
    xy :  Named num [1:2] -101.8 35.5
    

    函数如下:simulationRun>CreateDistrister>calcDistance>raster::xyValues。在上面的输出中,您只看到最后两个。 xyValues 来自光栅包。

    代码的第一段显示存在三个对象: effect.distance object , xy . 在第二段中,我们通过调用debug(xyValues)下降到xyValues。 影响距离 不见了。

    我的问题是:即使 xy公司 似乎被复制到 XY值 环境很好, 不是。这怎么解释?

    R version 2.11.1 (2010-05-31) 
    i386-pc-mingw32 
    
    locale:
    [1] LC_COLLATE=Slovenian_Slovenia.1250  LC_CTYPE=Slovenian_Slovenia.1250   
    [3] LC_MONETARY=Slovenian_Slovenia.1250 LC_NUMERIC=C                       
    [5] LC_TIME=Slovenian_Slovenia.1250    
    
    attached base packages:
    [1] splines   stats     graphics  grDevices utils     datasets  methods  
    [8] base     
    
    other attached packages:
     [1] raster_1.3-11   foreach_1.3.0   codetools_0.2-2 iterators_1.0.3
     [5] Hmisc_3.8-2     survival_2.35-8 spam_0.22-0     splancs_2.01-27
     [9] sp_0.9-66       spatstat_1.20-2 deldir_0.0-12   mgcv_1.6-2     
    
    loaded via a namespace (and not attached):
    [1] cluster_1.12.3     grid_2.11.1        lattice_0.18-8     Matrix_0.999375-39
    [5] nlme_3.1-96        tools_2.11.1 
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Joris Meys    14 年前

    更新: Nabble


    相当有趣的问题。当你检查的时候

    showMethods("xyValues",incl=T)
    

    object="Raster", xy="vector"
    function (object, xy, ...) 
    {
        if (length(xy) == 2) {
            callGeneric(object, matrix(xy, ncol = 2), ...)
        }
        else {
            stop("xy coordinates should be a two-column matrix or data.frame, or a vector of two numbers.")
        }
    }
    

    所以这实际上只是将xy参数转换成矩阵,并将所有其他参数传递给下一个泛型。下一个必须是这个:

    object="RasterLayer", xy="matrix"
    function (object, xy, ...) 
    {
        .local <- function (object, xy, method = "simple", buffer = NULL, 
            fun = NULL, na.rm = TRUE) 
        {
            if (dim(xy)[2] != 2) {
                stop("xy has wrong dimensions; it should have 2 columns")
            }
            if (!is.null(buffer)) {
                return(.xyvBuf(object, xy, buffer, fun, na.rm = na.rm))
            }
            if (method == "bilinear") {
                return(.bilinearValue(object, xy))
            }
            else if (method == "simple") {
                cells <- cellFromXY(object, xy)
                return(.readCells(object, cells))
            }
            else {
                stop("invalid method argument. Should be simple or bilinear.")
            }
        }
        .local(object, xy, ...)
    }
    

        2
  •  1
  •   Marek    14 年前

    buffer ... 争论。类型 str(list(...))