2017-09-20 3 views
0

私はsfオブジェクトを使用していますが、データフレームにユーザー定義関数を適用する方法について質問があります。これは馬鹿げた例ですが、もっと複雑な問題でやっているのと似ています。私はnamesという名前のデータフレームを持っています。このフレームには、それぞれが郡の名前を持つ2つの列があります。私は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_2列のうち、NAME_1列と名のうち、名前を取り、彼らならば見てジオメトリデータ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オブジェクトを各ベクトルでサブセット化してから、2つのオブジェクトに対してst_intersectsまたはst_intersectionを実行できませんか?なぜあなたは同じdfでそれらが必要なのか理解していない – elmuertefurioso

+1

try: 'check_intersection < - function(x){ return(st_intersects(nc [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

は匿名関数で

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

を試してみて、xが故に$が動作しない、ベクトル、ないdata.frameです。

関連する問題