私は150万行の中規模の要素を持っています。データは、(15.500593489554, -98.593930203954)
という形式の座標です。Rでこの正規表現をどのように高速化できますか?
各座標を抽出し、数値に変換して、別々の列に入れたいとします。問題は、私が書いたコードが、すべての私のラム(8 GB)、Rのクラッシュ、そして私のコンピュータのロックアップを長く食べるということです。 Rを再起動しても99%の物理メモリ使用率を維持します。ここ
私はちょうど最初の因子から座標を抽出するために使用されるコードである:これは働いていなかったので
library(stringr)
sapply(dat, function(x) as.numeric(str_match(x, "([.0-9]+),")[,2]))
、Iは、データ・セットのサブセットを決定し、100行でコマンドを実行していることが見出さ数秒かかります。 1000行には約25秒かかります。だから私は、データを分割して別々に処理し、それを一緒に戻しても何時間もかかるでしょう。
この問題を解決する方法はありますか?私はベースR(grep()
、gsub()
など)で私の正規表現コマンドを使用する方法を理解できませんでした。 str_match()
はちょうど遅いですか?
dat <- factor(replicate(1500000, paste("(", runif(1, 0, 150), ", ", runif(1, -150, 0), ")", sep = "")))
と参照用
が、ここでは第二の対の座標抽出するための私の正規表現である:ここで は模倣私のデータの構造サンプルデータセットですas.numeric(str_match(x, "([-.0-9]+)\\)")[,2]))
ベクトル化を理解する必要があります。これらのすべてのループがあなたを殺しています。たとえば、 'runif'がベクトル化されているため、' dat'を作成するときに 'replicate'を使用する理由はありません。 – Roland