使用字符

时间:2017-09-20 17:12:55

标签: r apply sf

我正在使用sf个对象,我有一个关于将用户定义的函数应用于数据框的问题。这是一个愚蠢的例子,但它类似于我试图处理更复杂的问题。我有一个名为names的数据框,它有两列,每列都有一个县的名称。我还阅读了sf包中包含的北卡罗来纳州数据。

require(sf)
name_1 <- c('Ashe','Alleghany','Surry')
name_2 <- c('Currituck','Northampton','Hertford')
names <- data.frame(cbind(name_1,name_2))
nc <- st_read(system.file("shape/nc.shp", package="sf"))

我尝试做的是创建一个功能,该功能沿着我的数据框names的每一行,从name_1列中取出名称,并从name_2列中取出名称,然后看到如果它们使用nc中的几何数据相交。我有:

check_intersection <- function(x){
  return(st_intersects(nc[nc$NAME== x$name_1,],nc[nc$NAME==x$name_2,],sparse = FALSE))
}
apply(names,1,check_intersection)

但这会产生Error in x$name_1 : $ operator is invalid for atomic vectors的错误。如何告诉函数从names中的每一行获取相应列中的字符值?

1 个答案:

答案 0 :(得分:1)

尝试

apply(names, 1, 
  function(x) 
    st_intersects(nc[nc$NAME == x[1],], nc[nc$NAME == x[2],], 
       sparse = FALSE)
)

在匿名函数中,x是一个向量,而不是data.frame,因此$不起作用。