2017-12-16 12 views
0

래스터 레이어의 샘플 변형을 만드는 기능이 있습니다. 이 함수는 RasterStack 또는 RasterBrick을 사용하고 레이어 당 하나의 변형이있는 목록을 반환합니다. 그것이 .GlobalEnv에 장전 할 때이 기능은 잘 작동하지만 패키지에서 사용할 때를 말한다 오류 얻을 :

Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘nlayers’ for signature ‘"numeric"’

역 추적 뭔가 내가 rasterToPoints 기능을 사용하는 줄을 잘못 가고, 또한되었다 말했다 내가 을 dlist에 사용하는 줄에서, 그러나 왜 nlayers()이 전혀 사용되지 않고 있는지, 또는 패키지에서 함수를 사용할 때만 문제가되는 이유를 알지 못합니다.함수는 전역 env에서는 객체로 작동하지만 패키지에서는 작동하지 않습니다.

#' Create sample variograms of CHIRPS data 
#' 
#' @name sampvar-chrp 
#' @title Create sample variograms of CHIRPS data 
#' 
#' @param data RasterStack of CHIRPS images 
#' @return List of sample variograms 
#' @examples 
#' data(chrprf) 
#' sampvar_chrp(chrprf) 
#' @export 
sampvar_chrp <- function(data) { 
    dlist <- as.list(data) 
    spdf <- lapply(dlist, function(x){ 
    names(x) <- "rain" 
    pts <- rasterToPoints(x, spatial = TRUE) 
    }) 
    rsamp <- lapply(spdf, function(x){ 
    s <- x[sample(1:length(x), size = 150), ] 
    }) 
    chrp_vario <- lapply(rsamp, function(x){ 
    v <- variogram(object = rain ~ 1, data = x) 
    }) 
    return(chrp_vario) 
} 

내가 어떤 조언을 주셔서 감사합니다 :

여기 roxygen2 주석이있는 기능입니다!

편집 : 문제의 적어도 일부는 data이 패키지에서 함수를 실행할 때 목록으로 성공적으로 변환되지 않는다고 생각합니다. 나는 기능을 수정하고, 다시 문서화하고, 재설치하고, "error" print 문을 얻었다. 따라서 as.list(data)은 글로벌 환경에서 작동하지만 내 패키지에서 작동하지 않는 것 같습니다. 당신이 raster::rasterToPoints 보면

#' Create sample variograms of CHIRPS data 
#' 
#' @name sampvar_chrp 
#' @title Create sample variograms of CHIRPS data 
#' 
#' @param data RasterStack of CHIRPS images 
#' @return List of sample variograms 
#' @importFrom raster rasterToPoints 
#' @examples 
#' data(chrprf) 
#' sampvar_chrp(chrprf) 
#' @export 
sampvar_chrp <- function(data) { 
    dlist <- as.list(data) 
    if (is.list(dlist) == TRUE) { 
    spdf <- lapply(dlist, function(x){ 
     names(x) <- "rain" 
     pts <- rasterToPoints(x, spatial = TRUE) 
    }) 
    rsamp <- lapply(spdf, function(x){ 
     s <- x[sample(1:length(x), size = 150), ] 
    }) 
    chrp_vario <- lapply(rsamp, function(x){ 
     v <- variogram(object = rain ~ 1, data = x) 
    }) 
    return(chrp_vario) 
    } else { print("error")} 

} 
+0

'rasterToPoints'가 다른 패키지에서 온 것이라면, 그 함수/패키지를 가져 왔습니까? 공유 한 항목에는 가져 오기 지시문이 없습니다. – joran

+0

@ joran 네, 이것은 다른 패키지 인'raster' 패키지에서 가져온 것입니다. 그리고 필자는 DESCRIPTION의'Imports' 섹션에서 이것을 설정했습니다. 나는 또한 그 라인을'raster :: rasterToPoints'로 변경하고 패키지를 다시 설치하거나 설치하려고했지만 아무런 효과가 없었다. 같은 오류가 발생했다. – DentalPegasus

+0

'DESCRIPTION'의'Imports :'섹션 외에'NAMESPACE'에'importFrom (raster, rasterToPoints)'또는'import (raster)'가 있습니까? – r2evans

답변

1

, 당신은

head(rasterToPoints) 

#1 function (x, fun = NULL, spatial = FALSE, ...)          
#2 {                     
#3  nl <- nlayers(x)   

가 호출 가장 먼저하는 일이 nlayers 것을 볼 수 있습니다 여기에 편집 기능입니다. 오류 메시지는 Raster* 개체를 예상하는 반면 numeric 벡터를 가져옵니다 것을 나타냅니다.

변수 dataRaster* 개체가 아닙니다. 따라서 진행 상황을 확인하려면 한 걸음 뒤로 물러 설 필요가 있습니다.

+0

그게 그렇게 이상한데,'data'는'Raster *'객체 ('RasterBrick' 특히,'dlist'의 각 요소가'rasterLayer'이고,'rasterToPoints'가 작동해야합니다. '.GlobalEnv' 함수를'RasterBrick'으로 테스트하면 예상대로 작동합니다. 그러나'rm (sampvar_chrp) '라고 쓰고 같은 입력'RasterBrick'을 가진 패키지에서 함수를 호출하려고하면이 오류가 발생합니다. 내 꾸러미로 뭔가가 진행되고있는 것 같지만 어디 있는지 모르겠습니다. – DentalPegasus

+0

오류를 유발하는 작고 재현 가능한 샘플 데이터를 제공 할 수 있습니까? 우리가 스스로를 작동시킬 수 없을 때 도움을주는 것은 정말로 어렵습니다. – r2evans

+0

@ r2evans 알았어요! 문제는 '래스터 (raster)'패키지 자체에 'as.list' 함수가 있다는 것인데, 마치 전역 환경에서는 사용되지만 패키지에서는 사용되지 않는 것 같습니다. 필자가 제안한대로'importFrom raster as.list'를 함수 문서에 추가했습니다. 도와 줘서 고마워! – DentalPegasus