首页 > 解决方案 > 为 GWR 映射创建函数

问题描述

我已经为 GWR 地图创建了一个函数,并且我已经运行了代码,但它没有在函数中并且运行良好。但是,当我创建一个函数时,我得到一个错误。我想知道是否有人可以帮忙,谢谢!

#a=polygonshapefile
#b= Dependent variabable of shapefile
#c= Explantory variable 1 
#d= Explantory vairbale 2

GWR_map <- function(a,b,c,d){
  
  GWRbandwidth <- gwr.sel(a$b ~  a$c+a$d, a,adapt=T)
  gwr.model = gwr(a$b ~  a$c+a$d, data = a, adapt=GWRbandwidth, hatmatrix=TRUE, se.fit=TRUE) 
  gwr.model
  
}

GWR_map(OA.Census,"Qualification", "Unemployed", "White_British")

上面的代码产生以下错误:

Error in model.frame.default(formula = a$b ~ a$c + a$d, data = a, drop.unused.levels = TRUE) : 
  invalid type (NULL) for variable 'a$b' 

标签: r

解决方案


您不能将函数参数与$. 尝试更改您的函数以改用该[[x]]符号。它应该如下所示:

GWR_map <- function(a,b,c,d){
  
  GWRbandwidth <- gwr.sel(a[[b]] ~  a[[c]]+a[[d]], a,adapt=T)
  gwr.model = gwr(a[[b]] ~  a[[c]]+a[[d]], data = a, adapt=GWRbandwidth, hatmatrix=TRUE, se.fit=TRUE) 
  gwr.model
  
}

R 帮助文档(关于列表的第 6.2 节)很好地解释了这种差异:

此外,还可以使用方括号中的列表组件的名称,即Lst[["name"]]与 相同Lst$name。这特别有用,当要提取的组件的名称存储在另一个变量中时 ,与x <- "name"; Lst[[x]]区分非常重要。'[[...]]' 是用于选择单个元素的运算符,而 '[...]' 是通用下标运算符。因此前者是列表 Lst 中的第一个对象,如果它是命名列表,则不包括名称。后者是列表 Lst 的子列表,仅包含第一个条目。如果是命名列表,则将名称转移到子列表。Lst[[1]]Lst[1]


推荐阅读