r - 为 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'
解决方案
您不能将函数参数与$
. 尝试更改您的函数以改用该[[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]
推荐阅读
- google-sheets - 如何从网络表单中的 Google 表格数据生成填充的 PDF?
- react-native - React Native 使用 useSelector 保持滚动视图位置
- java - 使@GeneratedValue 开始一个具有特定值的序列
- angular - 用 jest 测试角度组件会给出 resolveComponentResources
- regex - 如何将月份和日期的一位数日期格式更改为月份和日期的两位数
- maven - 查看多版本 JAR (MRJAR) 的版本源
- android - 打开项目时android studio卡住了
- postgresql - 从 SQL 调用函数
- entity-framework-core - 实体框架首先在多对多关系数据库中生成错误查询
- docker - Nodemon 不会在我的 docker 容器上重新加载我的 app.js