Allowing nulls to be passed through tryCatch
I have a simple function that checks whether two supplied arguments are characters, and if not, throws an error
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
check_args_are_chr("one", 2)
> Error in value[[3L]](cond) : Arguments must be supplied as characters
However, arg2 is an optional argument which isn't always passed into the function. NULL is also an acceptable value
I wanted to incorporate it so the expr passed to stopifnot
was
is.character(arg2) && is.null(arg2)
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2) && is.null(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
But this still makes the tryCatch throw an exception. How can I modify this so that acceptable classes are character
or NULL
r try-catch
add a comment |
I have a simple function that checks whether two supplied arguments are characters, and if not, throws an error
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
check_args_are_chr("one", 2)
> Error in value[[3L]](cond) : Arguments must be supplied as characters
However, arg2 is an optional argument which isn't always passed into the function. NULL is also an acceptable value
I wanted to incorporate it so the expr passed to stopifnot
was
is.character(arg2) && is.null(arg2)
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2) && is.null(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
But this still makes the tryCatch throw an exception. How can I modify this so that acceptable classes are character
or NULL
r try-catch
1
Simple: you cannot have bothis.character
andis.null
returnTRUE
. Use logical||
, not&&
.
– Rui Barradas
Nov 25 '18 at 21:30
Ugh, not sure why I couldn't see that. Cheers
– Conor Neilson
Nov 25 '18 at 21:35
add a comment |
I have a simple function that checks whether two supplied arguments are characters, and if not, throws an error
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
check_args_are_chr("one", 2)
> Error in value[[3L]](cond) : Arguments must be supplied as characters
However, arg2 is an optional argument which isn't always passed into the function. NULL is also an acceptable value
I wanted to incorporate it so the expr passed to stopifnot
was
is.character(arg2) && is.null(arg2)
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2) && is.null(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
But this still makes the tryCatch throw an exception. How can I modify this so that acceptable classes are character
or NULL
r try-catch
I have a simple function that checks whether two supplied arguments are characters, and if not, throws an error
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
check_args_are_chr("one", 2)
> Error in value[[3L]](cond) : Arguments must be supplied as characters
However, arg2 is an optional argument which isn't always passed into the function. NULL is also an acceptable value
I wanted to incorporate it so the expr passed to stopifnot
was
is.character(arg2) && is.null(arg2)
check_args_are_chr <- function(arg1, arg2){
tryCatch({
stopifnot(is.character(arg1), is.character(arg2) && is.null(arg2))},
error = function(e) stop("Arguments must be supplied as characters"))
}
But this still makes the tryCatch throw an exception. How can I modify this so that acceptable classes are character
or NULL
r try-catch
r try-catch
edited Nov 26 '18 at 6:29
DTYK
7081220
7081220
asked Nov 25 '18 at 21:15
Conor NeilsonConor Neilson
460515
460515
1
Simple: you cannot have bothis.character
andis.null
returnTRUE
. Use logical||
, not&&
.
– Rui Barradas
Nov 25 '18 at 21:30
Ugh, not sure why I couldn't see that. Cheers
– Conor Neilson
Nov 25 '18 at 21:35
add a comment |
1
Simple: you cannot have bothis.character
andis.null
returnTRUE
. Use logical||
, not&&
.
– Rui Barradas
Nov 25 '18 at 21:30
Ugh, not sure why I couldn't see that. Cheers
– Conor Neilson
Nov 25 '18 at 21:35
1
1
Simple: you cannot have both
is.character
and is.null
return TRUE
. Use logical ||
, not &&
.– Rui Barradas
Nov 25 '18 at 21:30
Simple: you cannot have both
is.character
and is.null
return TRUE
. Use logical ||
, not &&
.– Rui Barradas
Nov 25 '18 at 21:30
Ugh, not sure why I couldn't see that. Cheers
– Conor Neilson
Nov 25 '18 at 21:35
Ugh, not sure why I couldn't see that. Cheers
– Conor Neilson
Nov 25 '18 at 21:35
add a comment |
2 Answers
2
active
oldest
votes
First your code doesn't work as expected because you are confusing (binary) or ||
with and &&
Second, using tryCatch this way doesn't really make sense imho. Just do if (...) stop("Arguments must be supplied as characters")
. On the downside the if
statement is more awkward this way, but less awkward than using tryCatch
.
Yep, swapping to||
worked great, thanks.
– Conor Neilson
Nov 25 '18 at 21:40
Yes, in this contexttryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makestryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context
– Conor Neilson
Nov 25 '18 at 21:41
add a comment |
Either use missing
to check whether arg2
was given:
(missing(arg2) || (is.null(arg2) || is.character(arg2)))
or set a default value arg2 = NULL
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53472045%2fallowing-nulls-to-be-passed-through-trycatch%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
First your code doesn't work as expected because you are confusing (binary) or ||
with and &&
Second, using tryCatch this way doesn't really make sense imho. Just do if (...) stop("Arguments must be supplied as characters")
. On the downside the if
statement is more awkward this way, but less awkward than using tryCatch
.
Yep, swapping to||
worked great, thanks.
– Conor Neilson
Nov 25 '18 at 21:40
Yes, in this contexttryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makestryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context
– Conor Neilson
Nov 25 '18 at 21:41
add a comment |
First your code doesn't work as expected because you are confusing (binary) or ||
with and &&
Second, using tryCatch this way doesn't really make sense imho. Just do if (...) stop("Arguments must be supplied as characters")
. On the downside the if
statement is more awkward this way, but less awkward than using tryCatch
.
Yep, swapping to||
worked great, thanks.
– Conor Neilson
Nov 25 '18 at 21:40
Yes, in this contexttryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makestryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context
– Conor Neilson
Nov 25 '18 at 21:41
add a comment |
First your code doesn't work as expected because you are confusing (binary) or ||
with and &&
Second, using tryCatch this way doesn't really make sense imho. Just do if (...) stop("Arguments must be supplied as characters")
. On the downside the if
statement is more awkward this way, but less awkward than using tryCatch
.
First your code doesn't work as expected because you are confusing (binary) or ||
with and &&
Second, using tryCatch this way doesn't really make sense imho. Just do if (...) stop("Arguments must be supplied as characters")
. On the downside the if
statement is more awkward this way, but less awkward than using tryCatch
.
answered Nov 25 '18 at 21:37
Stefan FStefan F
7811613
7811613
Yep, swapping to||
worked great, thanks.
– Conor Neilson
Nov 25 '18 at 21:40
Yes, in this contexttryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makestryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context
– Conor Neilson
Nov 25 '18 at 21:41
add a comment |
Yep, swapping to||
worked great, thanks.
– Conor Neilson
Nov 25 '18 at 21:40
Yes, in this contexttryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makestryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context
– Conor Neilson
Nov 25 '18 at 21:41
Yep, swapping to
||
worked great, thanks.– Conor Neilson
Nov 25 '18 at 21:40
Yep, swapping to
||
worked great, thanks.– Conor Neilson
Nov 25 '18 at 21:40
Yes, in this context
tryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makes tryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context– Conor Neilson
Nov 25 '18 at 21:41
Yes, in this context
tryCatch
doesn't make much sense. It's because I'm trimming down to a minimal example. The full function contains more code that makes tryCatch
more useful, but I just wanted to make sure I got an answer that works with the functions context– Conor Neilson
Nov 25 '18 at 21:41
add a comment |
Either use missing
to check whether arg2
was given:
(missing(arg2) || (is.null(arg2) || is.character(arg2)))
or set a default value arg2 = NULL
add a comment |
Either use missing
to check whether arg2
was given:
(missing(arg2) || (is.null(arg2) || is.character(arg2)))
or set a default value arg2 = NULL
add a comment |
Either use missing
to check whether arg2
was given:
(missing(arg2) || (is.null(arg2) || is.character(arg2)))
or set a default value arg2 = NULL
Either use missing
to check whether arg2
was given:
(missing(arg2) || (is.null(arg2) || is.character(arg2)))
or set a default value arg2 = NULL
answered Nov 25 '18 at 21:34
Kamil BartońKamil Bartoń
1,12469
1,12469
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53472045%2fallowing-nulls-to-be-passed-through-trycatch%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Simple: you cannot have both
is.character
andis.null
returnTRUE
. Use logical||
, not&&
.– Rui Barradas
Nov 25 '18 at 21:30
Ugh, not sure why I couldn't see that. Cheers
– Conor Neilson
Nov 25 '18 at 21:35