2017-09-20 5 views
0

나는 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의 각 행에 대해 해당 열에서 문자 값을 가져 오는 함수를 어떻게 말합니까?

+0

각 벡터별로 sf 객체의 하위 집합을 만들 수 없으며 두 객체에서 st_intersects 또는 st_intersection을 실행할 수 있습니까? 왜 당신이 같은 df에서 그들을 필요로하는지 이해하지 못한다. – elmuertefurioso

+1

try :'check_intersection <- function (x) { return (st_intersects (nc $ NAME == x [1],], nc [nc $ NAME == x [ 2],], sparse = FALSE)) } – missuse

+0

벡터에 '$'연산자를 사용할 수 없습니다. x $ name_1과 그 외의 것들을 x [, 1]과 x $ name_2와 x [, 2]로 대체하십시오. – csgroen

답변

1

그러므로 $이 작동하지 않는, x은 벡터가 아닌 data.frame이며, 익명 함수에서

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

을보십시오.