使用字符应用
Apply using characters
我正在处理 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
?
中的每一行,如何告诉函数从适当的列中获取字符值
尝试
apply(names, 1,
function(x)
st_intersects(nc[nc$NAME == x[1],], nc[nc$NAME == x[2],],
sparse = FALSE)
)
在匿名函数中,x
是向量,不是data.frame
,因此$
不起作用。
我正在处理 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
?
尝试
apply(names, 1,
function(x)
st_intersects(nc[nc$NAME == x[1],], nc[nc$NAME == x[2],],
sparse = FALSE)
)
在匿名函数中,x
是向量,不是data.frame
,因此$
不起作用。