Dear r-sig-geo,
I am having a problem writing a GML file. The file I am trying to use
is a .csv that looks like this. I apologize that I am not sure how to
efficiently post this file to the list.
str(floras)
'data.frame': 86 obs. of 47 variables:
$ ref.num : Factor w/ 85 levels "10132","10185",..:
69 29 35 48 60 23 67 68 8 59 ...
$ Flora : Factor w/ 76 levels " LaVerne Smith
1977",..: 41 67 40 4 34 47 73 71 33 69 ...
$ Short.Name : Factor w/ 86 levels "Andrews Bald",..:
55 7 18 48 9 39 68 38 40 79 ...
$ Field.Year : int 2006 1972 1984 1987 1969 1978 2003
2003 1915 1994 ...
$ State : Factor w/ 2 levels "NC","SC": 1 1 1 1 1
1 1 1 1 1 ...
$ State2 : Factor w/ 6 levels
"","GA","NC","SC",..: 1 1 1 1 1 1 1 1 1 1 ...
$ State3 : Factor w/ 2 levels "","SC": 1 1 1 1 1 1
1 1 1 1 ...
$ County1 : Factor w/ 43 levels "","Alleghany",..:
3 3 23 4 2 39 20 16 20 15 ...
$ County2 : Factor w/ 26 levels
"","`","Alleghany",..: 1 1 1 1 1 4 1 1 1 1 ...
$ County3 : Factor w/ 13 levels "","Brunswick",..:
1 1 1 1 1 1 1 1 1 1 ...
$ County4 : Factor w/ 7 levels "","Cumberland",..:
1 1 1 1 1 1 1 1 1 1 ...
$ County5 : Factor w/ 3 levels "","Blount, TN",..:
1 1 1 1 1 1 1 1 1 1 ...
$ Families : int 108 88 97 91 71 76 101 85 95 52 ...
$ FamCalc : int NA 110 111 98 77 85 NA NA NA NA ...
$ Genera : int 381 348 327 272 197 222 305 223 336 81 ...
$ GeneraCalc : int NA 368 344 284 207 232 NA NA NA NA ...
$ species : int 695 677 596 430 328 355 519 346 659 106 ...
$ spp.Calc : int 696 693 590 426 327 353 NA NA NA NA ...
$ taxa : int 702 681 604 431 333 355 521 353 665 107 ...
$ native.sp : int 537 589 534 375 302 317 440 280 620 104 ...
$ exotic.sp : int 158 88 62 55 26 38 79 66 39 2 ...
$ exotic.taxa..if.different.: int NA NA NA NA NA NA NA NA NA NA ...
$ per.exotics.sp : num 22.73 13 10.4 12.79 7.93 ...
$ lat.cent.N : num 36.4 36.4 35.1 36 36.4 ...
$ long.cent.W : num -81.5 -81.6 -83.5 -81.8 -81.1 ...
$ min.lat.s : num 36.4 36.4 35 36 36.4 ...
$ max.lat.n : num 36.4 36.4 35.1 36.1 36.5 ...
$ max.long.e : num -81.5 -81.5 -83.4 -81.8 -81 ...
$ min.long.w : num -81.5 -81.6 -83.5 -81.9 -81.1 ...
$ min.elev : num 1067 1050 670 549 484 ...
$ max.elev : num 1427 1522 1575 1219 1227 ...
$ mid.elev : num 1247 1286 1122 884 856 ...
$ elev.range : num 361 472 905 671 743 ...
$ area.ha : num 368 2849 1626 2308 484 ...
$ physio : Factor w/ 3 levels "CP","MT","PD": 2 2
2 2 2 2 2 3 2 2 ...
$ tax.concept : Factor w/ 36 levels "","?RAB","Britton
& Brown 1896?, Chapman 1897",..: 33 21 22 30 21 21 14 14 4 34 ...
$ prim.herb : Factor w/ 21 levels "","BOON","Carl
Sandburg Home NHS",..: 2 9 20 8 10 10 3 7 4 20 ...
$ other.herbaria : Factor w/ 18 levels
"","BRP-NPS","DUKE",..: 1 15 1 1 1 1 1 1 7 1 ...
$ political : Factor w/ 7 levels
"","county","military",..: 5 6 5 5 6 6 5 5 2 5 ...
$ preserve.type : Factor w/ 18 levels "","Botanical",..:
11 1 4 5 1 1 7 7 1 8 ...
$ pub.type : Factor w/ 8 levels
"","Book","Dissertation",..: 7 5 4 7 7 5 6 6 5 5 ...
$ Vouchers : int 1167 NA NA NA NA NA NA NA NA NA ...
$ Entered. : Factor w/ 2 levels "","Y": 2 2 2 2 2 2
1 1 1 1 ...
$ Stats. : Factor w/ 2 levels "","Y": 2 2 2 2 2 2
2 2 2 2 ...
$ Bib.Checked : Factor w/ 3 levels "","N","Y": 3 3 3 3
3 3 3 3 3 3 ...
$ island : logi NA NA NA NA NA NA ...
$ Notes : Factor w/ 33 levels "","A few taxa were
excluded from counts because they were labeled as cultivated. The
Supplement (Sieren 1982b) does not include ne"| __truncated__,..: 1 24
1 1 17 19 28 1 1 20 ...
I was able to make a SpatialPointsDataFrame just fine with the
following commands.
Error in writeOGR(floras, paste(getwd(), "florasTEST.gml", sep = "/"), :
unknown data type
I am not sure why this is not working. I suspect that there may be a
problem with my file since it has many rows and columns with no
values. But...
The following reproducible example does work without problems.
library(rgdal)
ex <- data.frame(fl = LETTERS[1:4],
lat = c(36.4, 36.3908, 35.055, 36.0226),
long = c(-81.4614, -81.5717, -83.455, -81.8264),
d = c('','blah','blah',''))
coordinates(ex) = c('long','lat')
class(ex)
plot(ex)
# it works!
writeOGR(ex,paste(getwd(),'flTEST.gml',sep='/'),'fl', driver = 'GML')
# and can be read back in
fl <- readOGR(dsn = paste(getwd(),'flTEST.gml',sep='/'), layer = 'fl')
plot(fl)
Any advise would be most appreciated,
Michael
sessionInfo()
R version 2.10.1 (2009-12-14)
x86_64-apple-darwin9.8.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgdal_0.6-20 sp_0.9-44
loaded via a namespace (and not attached):
[1] grid_2.10.1 lattice_0.17-26 tools_2.10.1
Michael Denslow
I.W. Carpenter Jr. Herbarium [BOON]
Department of Biology
Appalachian State University
Boone, North Carolina U.S.A.
-- AND --
Communications Manager
Southeast Regional Network of Expertise and Collections
sernec.org
36.214177, -81.681480 +/- 3103 meters
Error in writeOGR(floras, paste(getwd(), "florasTEST.gml", sep = "/"), ?:
?unknown data type
That's weird - writeOGR looks like it should output the type and class
of the column when it gets this problem:
else stop(paste(dfcls[i], dftof[i], "unknown data type"))
- unless you're on a different version. Try running writeOGR in debug
mode - do:
debug(writeOGR)
then run your writeOGR function call. Hit return to step a line at a
time, and inspect variables. Or how about cutting some of your
variables out and seeing what fixes it/breaks it?
your sp object only seemed to have factors, numbers, and logicals and
so writeOGR shouldnt have any problem with it...
Barry
Error in writeOGR(floras, paste(getwd(), "florasTEST.gml", sep = "/"), ?:
?unknown data type
That's weird - writeOGR looks like it should output the type and class
of the column when it gets this problem:
else stop(paste(dfcls[i], dftof[i], "unknown data type"))
?- unless you're on a different version. Try running writeOGR in debug
mode - do:
debug(writeOGR)
then run your writeOGR function call. Hit return to step a line at a
time, and inspect variables. Or how about cutting some of your
variables out and seeing what fixes it/breaks it?
your sp object only seemed to have factors, numbers, and logicals and
so writeOGR shouldnt have any problem with it...
Thanks for the advice! debug() helped me figure it out. If I
understand correctly it was because I did have a logical. As I read it
the file can't have a logical.
...
dfcls <- sapply(slot(obj, "data"), function(x) class(x)[1])
known <- c("numeric", "character", "factor", "POSIXt", "integer")
if (!all(dfcls %in% known))
stop("unknown data type")
....
When I removed the logical column it worked just fine.
Thanks again for all of your help,
Michael
Michael Denslow
I.W. Carpenter Jr. Herbarium [BOON]
Department of Biology
Appalachian State University
Boone, North Carolina U.S.A.
-- AND --
Communications Manager
Southeast Regional Network of Expertise and Collections
sernec.org
36.214177, -81.681480 +/- 3103 meters
other attached packages:
[1] rgdal_0.6-20 sp_0.9-44
rgdal upgrade time for you I think. I have:
other attached packages:
[1] rgdal_0.6-24 sp_0.9-57
- handles logicals and tells you the columns it can't handle when it
can't handle them!
Actually I think this was a fix Roger did on my request...
Barry
Barry and List,
My apologies, I should have upgrade BEFORE posting the question.
Michael
<michael.denslow at gmail.com> wrote:
other attached packages:
[1] rgdal_0.6-20 sp_0.9-44
rgdal upgrade time for you I think. I have:
other attached packages:
[1] rgdal_0.6-24 sp_0.9-57
?- handles logicals and tells you the columns it can't handle when it
can't handle them!
?Actually I think this was a fix Roger did on my request...
Barry
Michael Denslow
I.W. Carpenter Jr. Herbarium [BOON]
Department of Biology
Appalachian State University
Boone, North Carolina U.S.A.
-- AND --
Communications Manager
Southeast Regional Network of Expertise and Collections
sernec.org
36.214177, -81.681480 +/- 3103 meters