Skip to content

Commit a0dfd5a

Browse files
authored
Merge pull request #120 from MohammedFCIS/master
handle .jcall unexpected error
2 parents 7ebaa8d + fe40273 commit a0dfd5a

File tree

1 file changed

+36
-32
lines changed

1 file changed

+36
-32
lines changed

rcdk/R/desc.R

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,21 @@
55
if (is.null(dval) || is.na(dval)) return(NA)
66
}
77

8-
exception <- .jcall(dval, "Ljava/lang/Exception;", "getException")
8+
exception <- tryCatch({
9+
.jcall(dval, "Ljava/lang/Exception;", "getException")},
10+
error = function(e) {
11+
e
12+
})
913
if (!is.null(exception)) {
1014
warning(exception$getMessage())
1115
return(rep(NA, nexpected))
1216
}
13-
17+
1418
nval <- numeric()
1519
if (!inherits(dval,'jobjRef') && is.na(dval)) {
1620
return(NA)
1721
}
18-
22+
1923
result <- .jcall(dval, "Lorg/openscience/cdk/qsar/result/IDescriptorResult;", "getValue")
2024
methods <- .jmethods(result)
2125

@@ -24,18 +28,18 @@
2428
len <- .jcall(result, "I", "length")
2529
for (i in 1:len) nval[i] <- .jcall(result, "D", "get", as.integer(i-1))
2630
} else if ("public int org.openscience.cdk.qsar.result.IntegerArrayResult.get(int)" %in% methods) {
27-
result <- .jcast(result, "org/openscience/cdk/qsar/result/IntegerArrayResult")
31+
result <- .jcast(result, "org/openscience/cdk/qsar/result/IntegerArrayResult")
2832
len <- .jcall(result, "I", "length")
29-
for (i in 1:len) nval[i] <- .jcall(result, "I", "get", as.integer(i-1))
33+
for (i in 1:len) nval[i] <- .jcall(result, "I", "get", as.integer(i-1))
3034
} else if ("public int org.openscience.cdk.qsar.result.IntegerResult.intValue()" %in% methods) {
31-
result <- .jcast(result, "org/openscience/cdk/qsar/result/IntegerResult")
35+
result <- .jcast(result, "org/openscience/cdk/qsar/result/IntegerResult")
3236
nval <- .jcall(result, "I", "intValue")
3337
} else if ("public double org.openscience.cdk.qsar.result.DoubleResult.doubleValue()" %in% methods) {
34-
result <- .jcast(result, "org/openscience/cdk/qsar/result/DoubleResult")
35-
nval <- .jcall(result, "D", "doubleValue")
38+
result <- .jcast(result, "org/openscience/cdk/qsar/result/DoubleResult")
39+
nval <- .jcall(result, "D", "doubleValue")
3640
} else if ("public boolean org.openscience.cdk.qsar.result.BooleanResult.booleanValue()" %in% methods) {
37-
result <- .jcast(result, "org/openscience/cdk/qsar/result/BooleanResult")
38-
nval <- .jcall(result, "Z", "booleanValue")
41+
result <- .jcast(result, "org/openscience/cdk/qsar/result/BooleanResult")
42+
nval <- .jcall(result, "Z", "booleanValue")
3943
}
4044

4145
return(nval)
@@ -50,9 +54,9 @@
5054
if (type == 'molecular') {
5155
interface <- J("org.openscience.cdk.qsar.IMolecularDescriptor")
5256
} else if (type == 'atomic') {
53-
interface <- J("org.openscience.cdk.qsar.IAtomicDescriptor")
57+
interface <- J("org.openscience.cdk.qsar.IAtomicDescriptor")
5458
} else if (type == 'bond') {
55-
interface <- J("org.openscience.cdk.qsar.IBondDescriptor")
59+
interface <- J("org.openscience.cdk.qsar.IBondDescriptor")
5660
}
5761
dklass <- interface@jobj
5862
dcob <- get.chem.object.builder()
@@ -79,7 +83,7 @@
7983
}
8084

8185
#' Get descriptor class names
82-
#'
86+
#'
8387
#' @param type A string indicating which class of descriptors to return. Specifying
8488
#' `"all"` will return class names for all molecular descriptors. Options include
8589
#' * topological
@@ -108,8 +112,8 @@ get.desc.names <- function(type = "all") {
108112
}
109113

110114
#' List available descriptor categories
111-
#'
112-
#' @return A character vector listing available descriptor categories. This can be
115+
#'
116+
#' @return A character vector listing available descriptor categories. This can be
113117
#' used in \link{get.desc.names}
114118
#' @seealso \link{get.desc.names}
115119
#' @author Rajarshi Guha (\email{rajarshi.guha@@gmail.com})
@@ -121,7 +125,7 @@ get.desc.categories <- function() {
121125
}
122126

123127
#' Compute descriptor values for a set of molecules
124-
#'
128+
#'
125129
#' @param molecules A `list` of molecule objects
126130
#' @param which.desc A character vector listing descriptor class names
127131
#' @param verbose If `TRUE`, verbose output
@@ -144,14 +148,14 @@ eval.desc <- function(molecules, which.desc, verbose = FALSE) {
144148
}
145149

146150
dcob <- get.chem.object.builder()
147-
151+
148152
if (length(which.desc) == 1) {
149153
desc <- .jnew(which.desc)
150154
.jcall(desc, "V", "initialise", dcob)
151-
155+
152156
dnames <- .jcall(desc, "[Ljava/lang/String;", "getDescriptorNames")
153157
dnames <- gsub('-', '.', dnames)
154-
158+
155159
descvals <- lapply(molecules, function(a,b) {
156160
val <- tryCatch({.jcall(b, "Lorg/openscience/cdk/qsar/DescriptorValue;", "calculate", a)},
157161
warning = function(e) return(NA),
@@ -161,7 +165,7 @@ eval.desc <- function(molecules, which.desc, verbose = FALSE) {
161165

162166
vals <- lapply(descvals, .get.desc.values, nexpected = length(dnames))
163167
vals <- data.frame(do.call('rbind', vals))
164-
names(vals) <- dnames
168+
names(vals) <- dnames
165169
return(vals)
166170
} else {
167171
counter <- 1
@@ -172,7 +176,7 @@ eval.desc <- function(molecules, which.desc, verbose = FALSE) {
172176
, "\n") }
173177
desc <- .jnew(desc)
174178
.jcall(desc, "V", "initialise", dcob)
175-
179+
176180
dnames <- .jcall(desc, "[Ljava/lang/String;", "getDescriptorNames")
177181
dnames <- gsub('-', '.', dnames)
178182

@@ -183,16 +187,16 @@ eval.desc <- function(molecules, which.desc, verbose = FALSE) {
183187
vals <- lapply(descvals, .get.desc.values, nexpected = length(dnames))
184188
vals <- data.frame(do.call('rbind', vals))
185189

186-
190+
187191
if (length(vals) == 1 && any(is.na(vals))) {
188192

189193
vals <- as.data.frame(matrix(NA, nrow=1, ncol=length(dnames)))
190194
}
191-
195+
192196
names(vals) <- dnames
193197
## idx <- which(is.na(names(vals)))
194198
## if (length(idx) > 0) vals <- vals[,-idx]
195-
199+
196200
dl[[counter]] <- vals
197201
counter <- counter + 1
198202
}
@@ -201,7 +205,7 @@ eval.desc <- function(molecules, which.desc, verbose = FALSE) {
201205
}
202206

203207
#' Get class names for atomic descriptors
204-
#'
208+
#'
205209
#' @param type A string indicating which class of descriptors to return. Specifying
206210
#' `"all"` will return class names for all molecular descriptors. Options include
207211
#' * topological
@@ -220,7 +224,7 @@ get.atomic.desc.names <- function(type = "all") {
220224
}
221225

222226
#' Compute descriptors for each atom in a molecule
223-
#'
227+
#'
224228
#' @param molecule A molecule object
225229
#' @param which.desc A character vector of atomic descriptor class names
226230
#' @param verbose Optional. Default \code{FALSE}. Toggle verbosity.
@@ -250,20 +254,20 @@ eval.atomic.desc <- function(molecule, which.desc, verbose = FALSE) {
250254
}
251255
return(dval)
252256
})
253-
257+
254258
dnames <- NULL
255259
if (inherits(descvals[[1]], "jobjRef")) {
256260
dnames <- .jcall(descvals[[1]], "[Ljava/lang/String;", "getNames")
257261
} else {
258262
dnames <- gsub('org.openscience.cdk.qsar.descriptors.atomic.', '', desc)
259263
}
260-
if (verbose)
264+
if (verbose)
261265
cat("\t", "computed", length(dnames), "descriptor values\n")
262-
266+
263267
vals <- lapply(descvals, .get.desc.values, nexpected=length(dnames))
264268
vals <- data.frame(do.call('rbind', vals))
265269
names(vals) <- dnames
266-
270+
267271
dl[[counter]] <- vals
268272
counter <- counter + 1
269273
}
@@ -320,8 +324,8 @@ get.xlogp <- function(molecule) {
320324
}
321325

322326
#' Compute volume of a molecule
323-
#'
324-
#' This method does not require 3D coordinates. As a result its an
327+
#'
328+
#' This method does not require 3D coordinates. As a result its an
325329
#' approximation
326330
#' @param molecule A molecule object
327331
#' @return A double value representing the volume

0 commit comments

Comments
 (0)