Rの初心者では、ループのために、そして適用関数にステップを踏み出す時間があると思います。私はこのコードを苦労しており、誰でも手伝ってくれるのだろうかと思っています。ネストされたforループの代わりにApply関数の1つを使用してください。R
私が機能を持っている:
earth.dist <- function (long1, lat1, long2, lat2)
{
rad <- pi/180
a1 <- lat1 * rad
a2 <- long1 * rad
b1 <- lat2 * rad
b2 <- long2 * rad
dlon <- b2 - a2
dlat <- b1 - a1
a <- (sin(dlat/2))^2 + cos(a1) * cos(b1) * (sin(dlon/2))^2
c <- 2 * atan2(sqrt(a), sqrt(1 - a))
R <- 6378.145
d <- R * c
return(d)
}
は今、私は彼らの長い/緯度を持つ2つの異なるデータセット、所定の大都市とその長い/緯度座標のリストで1とアメリカのランダムな位置を持つものを持っています座標。私が書いたforループは、基本的には、所定の大都市のlong/lat座標に対するランダムな場所の各long/lat座標の差を計算し、最も近い都市が位置する州にランダムな場所を置きます。各都市所定のリストの中にランダムな都市スプレッドシートの新しい列に挿入された状態がある。
適用を使用してこのループを実行する方法はありますか?このループは実際にトリックを行いますが、それはとても長くてかさばりますし、適用関数がより良い仕事をすることができることを私は知っています。ここで
はループです:
for(i in 1:nrow(randomlocations)){
vec<-vector()
for(j in 1:nrow(predeterminedcities)){
a<-earth.dist(randomlocations$long[i],randomlocations$lat[i], predeterminedcities$long[j], predeterminedcities$lat[j])
vec[[j]]<-a
}
ind<- as.numeric(which.min(vec))
randomlocations$state[i]<-as.character(predeterminedcities$STATE[ind])
print(i)
}
'earth.dist'は緯度と経度のベクトルを受け入れます。これが真であれば、あらかじめ決められた都市のベクトル全体を一気に送ります: 'a <-earth.dist(randomlocations $ long [i]、randomlocations $ lat [i]、priorcities $ long、所定の$ lat)'。 – lmo
ありがとう@Imo!どのような行、またはあらかじめ決められた都市、この技術を使っている最短距離がどのようにわかるか知っていますか? – Nechama
ベクトルの出力(ベクトル上で動作している場合)は、あらかじめ設定された都市から発注されるため、それらの位置を使用してその情報を引き出すことができます。多分それが慣れていない場合は、 'which.min'を見てみてください。 – lmo