我已经为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' 发布于 2021-01-20 23:25:16
您不能在$中使用函数参数。尝试更改您的函数以使用[[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 help docs (关于列表的第6.2节)很好地解释了这种差异:
此外,还可以在双方括号中使用列表组件的名称,即Lst[["name"]]与Lst$name相同。这特别有用,当要提取的组件的名称存储在另一个变量中时,如在x <- "name"; Lst[[x]]中,区分Lst[[1]]和Lst[1]是非常重要的。‘[...]’是用于选择单个元素的运算符,而‘...’是一个通用的下标运算符。因此,前者是列表Lst中的第一个对象,如果它是命名列表,则不包括该名称。后者是只包含第一个条目的列表Lst的子列表。如果是命名列表,则将名称转移到子列表。
https://stackoverflow.com/questions/65812190
复制相似问题