Skip to content

Commit e425ca3

Browse files
committed
Convert types manually if read.table() failed
1 parent 8536059 commit e425ca3

File tree

2 files changed

+46
-5
lines changed

2 files changed

+46
-5
lines changed

R/extractObservationData_1.R

+45-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ extractObservationData_1 <- function(
44
)
55
{
66
#kwb.utils::assignPackageObjects("kwb.en13508.2")
7-
#header.info <- kwb.en13508.2::euCodedFileHeader()
87

98
# Create accessor function to header info fields
109
fromHeader <- kwb.utils::createAccessor(header.info)
@@ -33,7 +32,7 @@ extractObservationData_1 <- function(
3332
colClasses = colClasses,
3433
header = TRUE
3534
)
36-
35+
3736
indices$B01 <- indices$B[grep("^#B01=", eu_lines[indices$B])]
3837

3938
# Try to generate a vector of inspection numbers assigning to each observation
@@ -133,7 +132,7 @@ getColClasses2 <- function(codes, as.text)
133132
if (as.text) {
134133
colClasses[] <- "character"
135134
}
136-
135+
137136
colClasses
138137
}
139138

@@ -156,9 +155,9 @@ readObservationsFromCsvText <- function(text, sep, dec, quote, colClasses, ...)
156155
}
157156

158157
dot.args <- list(...)
159-
#dot.args <- list() # for debugging!
158+
#dot.args <- list(header = TRUE) # for debugging!
160159

161-
kwb.utils::callWith(
160+
result <- try(kwb.utils::callWith(
162161
utils::read.table,
163162
text = text,
164163
sep = sep,
@@ -169,5 +168,46 @@ readObservationsFromCsvText <- function(text, sep, dec, quote, colClasses, ...)
169168
stringsAsFactors = FALSE,
170169
colClasses = colClasses,
171170
dot.args
171+
))
172+
173+
if (!kwb.utils::isTryError(result)) {
174+
return(result)
175+
}
176+
177+
result <- kwb.utils::callWith(
178+
utils::read.table,
179+
text = text,
180+
sep = sep,
181+
dec = dec,
182+
quote = quote,
183+
comment.char = "",
184+
blank.lines.skip = FALSE,
185+
stringsAsFactors = FALSE,
186+
colClasses = NA,
187+
dot.args
188+
)
189+
190+
convertTypes(result, codes = inspectionDataFieldCodes())
191+
}
192+
193+
# convertTypes -----------------------------------------------------------------
194+
convertTypes <- function(data, codes)
195+
{
196+
target_classes <- sapply(
197+
get_elements(codes, names(data)), get_elements, "class"
172198
)
199+
200+
given_classes <- sapply(data, "class")
201+
202+
columns_convert <- names(which(given_classes != target_classes))
203+
204+
for (column in columns_convert) {
205+
target_class <- target_classes[column]
206+
data[[column]] <- kwb.utils::catAndRun(
207+
sprintf("Converting column '%s' to %s", column, target_class),
208+
do.call(paste0("as.", target_class), list(data[[column]]))
209+
)
210+
}
211+
212+
data
173213
}

R/readEuCodedFile.R

+1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ readEuCodedFile <- function(
108108

109109
dot.args <- list(...)
110110
#dot.args <- list() # for debugging!
111+
#dot.args <- list(as.text = TRUE)
111112

112113
observations <- run(
113114
"Extracting observation records",

0 commit comments

Comments
 (0)