Значения не копируются в следующую (локальную) среду?

Рассмотрим этот вывод из 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 > createDistRaster > calcDistance > растр:: xyValues. В приведенном выше вы увидите только два последних. xyValues - из растрового пакета.

Первый параграф кода показывает, что присутствуют три объекта: effect.distance, object, xy. Во втором абзаце мы сходим в xyValues, вызывая debug (xyValues). В третьем абзаце мы видим, что effect.distance отсутствует.

Мой вопрос: даже если object и xy, кажется, скопированы в среду xyValues просто отлично, effect.distance нет. Как это можно объяснить?

My sessionInfo()

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 

Ответ 1

ОБНОВЛЕНИЕ: Эта проблема также обсуждается в списке рассылки R, и это оказалось ошибкой/несогласованностью в разрешении переданных аргументов в конкретных случаях. Об этом сообщается Р. Обсуждение можно найти по адресу: Nabble


Довольно интересная проблема. Когда вы проверяете

showMethods("xyValues",incl=T)

Есть два важных фрагмента кода. Единица с сигнатурным вектором для xy и одна для xy в качестве матрицы. Поскольку ваш объект является объектом "RasterLayer", вам необходимо убедиться, что origin.point является матрицей. Это довольно противоречиво, если мы посмотрим на код

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, ...)
}

Этот принимает аргумент "buffer". Почему значение для аргумента не может быть найдено в дереве синтаксического разбора, у меня нет подсказки, но вы можете попытаться избежать каскада метода, предоставив матрицу в качестве входных данных вместо вектора.

Ответ 2

Аргумент

buffer передается через аргумент .... Введите str(list(...)) в режиме отладки.