首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为GWR地图创建函数

为GWR地图创建函数
EN

Stack Overflow用户
提问于 2021-01-20 23:07:30
回答 1查看 20关注 0票数 0

我已经为GWR地图创建了一个函数,并且运行了没有包含在函数中的代码,它工作得很好。然而,当我创建一个函数时,我得到了一个错误。我想知道是否有人能帮上忙,谢谢!

代码语言:javascript
复制
#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")

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

代码语言:javascript
复制
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' 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-20 23:25:16

您不能在$中使用函数参数。尝试更改您的函数以使用[[x]]表示法。它应该看起来像这样:

代码语言:javascript
复制
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 help docs (关于列表的第6.2节)很好地解释了这种差异:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65812190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档