if / else语句中的花括号问题

时间:2017-12-29 19:13:36

标签: r function if-statement

我对R很新,我正在尝试创建一个具有一定地理输出的函数。我试图包含一些if / else语句来设置某些参数的默认值,如地图标题,但反复遇到相同的问题。其他人也有同样的问题,但是他们的询问对我没有帮助。

下面是我的代码的简化版本,以及我遇到的错误。

   my_function <- function(x, y, map.title, a, ... ){
    neighbours <- spdep::poly2nb(x, queen=T, snap=T)
    print("neighbours defined")
    local <- spdep::localmoran(y, listw=nb2listw(neighbours, style="W")) 
    moran_map <- x
    moran_map@data <- cbind(x@data, local)
  if(map.title = NULL) {
    seg_map <- tmap::tm_shape(moran_map) +
               tm_fill(col = "Ii",
                       style = "quantile",
                       title = "Local Moran's I Statistic") +
               tm_layout(title = "Good Maps Have Titles")
    return(map) 
} else {
    seg_map <- tmap::tm_shape(moran_map) +
                     tm_fill(col = 'Ii',
                             style = 'quantile',
                             title = "Local Moran's I Statistic",
                             palette = a) +
                     tm_layout(title = map.title)
   return(map) 
   }
}

我一直收到以下错误。

>Error: no function to return from, jumping to top level

>   }
Error: unexpected '}' in "  }"

>   }
Error: unexpected '}' in "  }"

有谁知道我做错了什么,以及我如何解决这个问题?

非常感谢!

1 个答案:

答案 0 :(得分:0)

在你收到这些错误之前,你有一个错误:

+   if(map.title = NULL) {
Error: unexpected '=' in:
"    moran_map@data <- cbind(x@data, local)
  if(map.title ="

您不能在=测试中使用单个if。通常,您使用==来测试值的相等性,但NULL是特殊的,所以在这里您需要is.null(map.title)(正如Parfait所说)。

当R在该语句中发现错误时,它停止了函数定义并重新开始;后来的陈述没有意义所以你得到了那些错误。