2016-08-09 138 views
0

Ich verwende R für GIS-Anwendungen mit spatstat und verwandten Paketen. Ich möchte einen Kerndichte Raster erzeugen, die ich schon dabei mit dem folgenden gelungen:R: Numerische Ausgabe von der Dichte()

spatialgrid <- as(density(mypattern,5000,eps=50),'SpatialGridDataFrame') 
rastergrid <- raster(spatialgrid) 
writeRaster(rastergrid, filename=‘/file.tif’,format=‘GTiff’) 

Allerdings, wenn ich das resultierende Raster in QGIS laden Ich habe Probleme aufgrund der Tatsache, dass die Zellenwerte sind geschrieben in wissenschaftlicher Notation, anstatt als einfache Zahlen.

Basierend auf this question, habe ich versucht, format(density(),scientific=FALSE) aber, dass eine schwere Spitze in CPU und nahm verursachte eine sehr lange Zeit zu laufen, so dass ich schließlich den Prozess getötet.

Ich würde gerne einen Weg finden, um die Dichte() -Funktion zur Ausgabe ganzzahliger Werte zu erhalten. Alternativ gibt es eine Möglichkeit, den Datenrahmen in einen ganzzahligen Datentyp zu konvertieren.

+0

Zwei Möglichkeiten: Ändern Sie die 'scipen' Option z.B. 'Optionen (scipen = 3)' '; Verwenden Sie 'round' anstelle von' format'. Ich weiß nicht, ob sie schneller sein werden, aber es lohnt sich, es zu versuchen. – dash2

Antwort

0

Ich sehe hier zwei Möglichkeiten.

  1. könnten Sie die options(scipen=99) verwenden wissenschaftliche Notation zu entfernen, wie von @ dash2 vorgeschlagen.
  2. Multiplizieren Sie Ihre Werte mit einem Faktor, zum Beispiel 1000. Versuchen Sie etwas, bis Ihre Werte nicht mehr in wissenschaftlicher Notation sind. Der Vorteil ist, dass Ihr Raster nicht so viele führende Nullen hat wie Option 1 und weniger Platz auf der Festplatte benötigt, aber der Nachteil ist, dass Sie Ihre Werte mit diesem Faktor in QGIS multiplizieren müssen.
0

"Wissenschaftliche Notation" hat damit nichts zu tun. Das ist für die Textdarstellung, aber mit writeRaster schreiben Sie in ein numerisches Format. Sie sind nur reelle Zahlen.

Ich glaube, Sie vereinfachen kann:

d <- density(mypattern,5000,eps=50) 
r <- raster(d) 

Das Problem ist wahrscheinlich, dass die Dichten sehr niedrig sind. Wenn Sie eine größere Anzahl (wie jgadoury vorgeschlagen)

r <- r * 1000000 

Möglicherweise gerundet

r <- round(r) 

Und dann

writeRaster(r, 'file.tif')