How to check if object (variable) is defined in R?
I'd like to check if some variable is defined in R - without getting an error. How can I do this?
My attempts (not successful):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Thanks!
r
add a comment |
I'd like to check if some variable is defined in R - without getting an error. How can I do this?
My attempts (not successful):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Thanks!
r
add a comment |
I'd like to check if some variable is defined in R - without getting an error. How can I do this?
My attempts (not successful):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Thanks!
r
I'd like to check if some variable is defined in R - without getting an error. How can I do this?
My attempts (not successful):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Thanks!
r
r
edited Jun 1 '16 at 14:16
TMS
asked Feb 20 '12 at 21:46
TMSTMS
34k37172305
34k37172305
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
You want exists()
:
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
1
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
25
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
2
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
3
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
add a comment |
See ?exists
, for some definition of "...is defined". E.g.
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
7
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
7
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
2
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
add a comment |
if you are inside a function, missing() is what you want.
exchequer = function(x) {
if(missing(x)){
message("x is missing… :-(")
}
}
exchequer()
x is missing… :-(
missing
only works for function arguments, however. You can't dofoo <- function(x) {missing(x); missing(y)}
or you will getfoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.
– Dannid
Feb 11 at 17:48
add a comment |
As others have pointed out, you're looking for exists
. Keep in mind that using exists
with names used by R's base packages would return true regardless of whether you defined the variable:
> exists("data")
[1] TRUE
To get around this (as pointed out by Bazz; see ?exists
), use the inherits
argument:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Of course, if you wanted to search the name spaces of attached packages, this would also fall short:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
The only thing I can think of to get around this -- to search in attached packages but not in base packages -- is the following:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Compare replacing _object_name_
with "data.table"
(TRUE
) vs. "var"
(FALSE
)
(of course, if you're not on RStudio, I think the first automatically attached environment is "package:stats"
)
1
Playing around, using argumentinherits = FALSE
seems to isolate things in the global environment. Does that sound right?
– CJB
Jan 7 '16 at 12:49
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
1
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
add a comment |
If you don't want to use quotes, you can use deparse(substitute()) trick which I found in example section of ?substitute:
is.defined <- function(sym) {
sym <- deparse(substitute(sym))
env <- parent.frame()
exists(sym, env)
}
is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
you can alsoforce
or evaluate it in the function like this:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
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%2f9368900%2fhow-to-check-if-object-variable-is-defined-in-r%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
You want exists()
:
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
1
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
25
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
2
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
3
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
add a comment |
You want exists()
:
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
1
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
25
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
2
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
3
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
add a comment |
You want exists()
:
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
You want exists()
:
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
answered Feb 20 '12 at 21:51
Dirk EddelbuettelDirk Eddelbuettel
281k38519606
281k38519606
1
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
25
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
2
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
3
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
add a comment |
1
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
25
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
2
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
3
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
1
1
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
@Gavin & Dirk, you're so nice to each other :) Only solution is that you toss the coin (Bernoulli with p=0.5 :-)) who will get the accept! :-)
– TMS
Feb 20 '12 at 22:00
25
25
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
@tim if you are inside a function, missing() is what you want.
– CousinCocaine
Jan 27 '14 at 14:31
2
2
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
Might get a bit trickier if checking for list elements: stackoverflow.com/q/7719741
– TMS
Sep 20 '14 at 11:58
3
3
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
what about for what the op wanted - using the variable name, not in quotes?
– tim
Jun 13 '15 at 13:46
add a comment |
See ?exists
, for some definition of "...is defined". E.g.
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
7
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
7
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
2
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
add a comment |
See ?exists
, for some definition of "...is defined". E.g.
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
7
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
7
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
2
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
add a comment |
See ?exists
, for some definition of "...is defined". E.g.
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
See ?exists
, for some definition of "...is defined". E.g.
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
answered Feb 20 '12 at 21:50
Gavin SimpsonGavin Simpson
137k19314389
137k19314389
7
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
7
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
2
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
add a comment |
7
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
7
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
2
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
7
7
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
You win by 52 seconds :)
– Dirk Eddelbuettel
Feb 20 '12 at 21:51
7
7
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
@DirkEddelbuettel Well, if you will use ridiculously long object names ;-)
– Gavin Simpson
Feb 20 '12 at 21:54
2
2
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
heh. Happens to me all the time when I am testing out examples before posting, Gavin or Josh have already answered it.
– Maiasaura
Feb 20 '12 at 22:17
add a comment |
if you are inside a function, missing() is what you want.
exchequer = function(x) {
if(missing(x)){
message("x is missing… :-(")
}
}
exchequer()
x is missing… :-(
missing
only works for function arguments, however. You can't dofoo <- function(x) {missing(x); missing(y)}
or you will getfoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.
– Dannid
Feb 11 at 17:48
add a comment |
if you are inside a function, missing() is what you want.
exchequer = function(x) {
if(missing(x)){
message("x is missing… :-(")
}
}
exchequer()
x is missing… :-(
missing
only works for function arguments, however. You can't dofoo <- function(x) {missing(x); missing(y)}
or you will getfoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.
– Dannid
Feb 11 at 17:48
add a comment |
if you are inside a function, missing() is what you want.
exchequer = function(x) {
if(missing(x)){
message("x is missing… :-(")
}
}
exchequer()
x is missing… :-(
if you are inside a function, missing() is what you want.
exchequer = function(x) {
if(missing(x)){
message("x is missing… :-(")
}
}
exchequer()
x is missing… :-(
answered Mar 9 '13 at 21:56
timtim
1,9201734
1,9201734
missing
only works for function arguments, however. You can't dofoo <- function(x) {missing(x); missing(y)}
or you will getfoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.
– Dannid
Feb 11 at 17:48
add a comment |
missing
only works for function arguments, however. You can't dofoo <- function(x) {missing(x); missing(y)}
or you will getfoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.
– Dannid
Feb 11 at 17:48
missing
only works for function arguments, however. You can't do foo <- function(x) {missing(x); missing(y)}
or you will get foo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.– Dannid
Feb 11 at 17:48
missing
only works for function arguments, however. You can't do foo <- function(x) {missing(x); missing(y)}
or you will get foo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.– Dannid
Feb 11 at 17:48
add a comment |
As others have pointed out, you're looking for exists
. Keep in mind that using exists
with names used by R's base packages would return true regardless of whether you defined the variable:
> exists("data")
[1] TRUE
To get around this (as pointed out by Bazz; see ?exists
), use the inherits
argument:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Of course, if you wanted to search the name spaces of attached packages, this would also fall short:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
The only thing I can think of to get around this -- to search in attached packages but not in base packages -- is the following:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Compare replacing _object_name_
with "data.table"
(TRUE
) vs. "var"
(FALSE
)
(of course, if you're not on RStudio, I think the first automatically attached environment is "package:stats"
)
1
Playing around, using argumentinherits = FALSE
seems to isolate things in the global environment. Does that sound right?
– CJB
Jan 7 '16 at 12:49
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
1
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
add a comment |
As others have pointed out, you're looking for exists
. Keep in mind that using exists
with names used by R's base packages would return true regardless of whether you defined the variable:
> exists("data")
[1] TRUE
To get around this (as pointed out by Bazz; see ?exists
), use the inherits
argument:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Of course, if you wanted to search the name spaces of attached packages, this would also fall short:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
The only thing I can think of to get around this -- to search in attached packages but not in base packages -- is the following:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Compare replacing _object_name_
with "data.table"
(TRUE
) vs. "var"
(FALSE
)
(of course, if you're not on RStudio, I think the first automatically attached environment is "package:stats"
)
1
Playing around, using argumentinherits = FALSE
seems to isolate things in the global environment. Does that sound right?
– CJB
Jan 7 '16 at 12:49
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
1
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
add a comment |
As others have pointed out, you're looking for exists
. Keep in mind that using exists
with names used by R's base packages would return true regardless of whether you defined the variable:
> exists("data")
[1] TRUE
To get around this (as pointed out by Bazz; see ?exists
), use the inherits
argument:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Of course, if you wanted to search the name spaces of attached packages, this would also fall short:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
The only thing I can think of to get around this -- to search in attached packages but not in base packages -- is the following:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Compare replacing _object_name_
with "data.table"
(TRUE
) vs. "var"
(FALSE
)
(of course, if you're not on RStudio, I think the first automatically attached environment is "package:stats"
)
As others have pointed out, you're looking for exists
. Keep in mind that using exists
with names used by R's base packages would return true regardless of whether you defined the variable:
> exists("data")
[1] TRUE
To get around this (as pointed out by Bazz; see ?exists
), use the inherits
argument:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Of course, if you wanted to search the name spaces of attached packages, this would also fall short:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
The only thing I can think of to get around this -- to search in attached packages but not in base packages -- is the following:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Compare replacing _object_name_
with "data.table"
(TRUE
) vs. "var"
(FALSE
)
(of course, if you're not on RStudio, I think the first automatically attached environment is "package:stats"
)
edited Feb 3 '16 at 3:37
MichaelChirico
20.5k863117
20.5k863117
answered Sep 24 '15 at 16:19
Santiago BaldrichSantiago Baldrich
563511
563511
1
Playing around, using argumentinherits = FALSE
seems to isolate things in the global environment. Does that sound right?
– CJB
Jan 7 '16 at 12:49
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
1
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
add a comment |
1
Playing around, using argumentinherits = FALSE
seems to isolate things in the global environment. Does that sound right?
– CJB
Jan 7 '16 at 12:49
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
1
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
1
1
Playing around, using argument
inherits = FALSE
seems to isolate things in the global environment. Does that sound right?– CJB
Jan 7 '16 at 12:49
Playing around, using argument
inherits = FALSE
seems to isolate things in the global environment. Does that sound right?– CJB
Jan 7 '16 at 12:49
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
@Bazz you're correct; I've edited this into the answer.
– MichaelChirico
Feb 3 '16 at 3:21
1
1
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
This comment should be higher up, since I use variable name "data", just using exist gave me some trouble initially.
– mzm
May 11 '16 at 14:44
add a comment |
If you don't want to use quotes, you can use deparse(substitute()) trick which I found in example section of ?substitute:
is.defined <- function(sym) {
sym <- deparse(substitute(sym))
env <- parent.frame()
exists(sym, env)
}
is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
you can alsoforce
or evaluate it in the function like this:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
add a comment |
If you don't want to use quotes, you can use deparse(substitute()) trick which I found in example section of ?substitute:
is.defined <- function(sym) {
sym <- deparse(substitute(sym))
env <- parent.frame()
exists(sym, env)
}
is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
you can alsoforce
or evaluate it in the function like this:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
add a comment |
If you don't want to use quotes, you can use deparse(substitute()) trick which I found in example section of ?substitute:
is.defined <- function(sym) {
sym <- deparse(substitute(sym))
env <- parent.frame()
exists(sym, env)
}
is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE
If you don't want to use quotes, you can use deparse(substitute()) trick which I found in example section of ?substitute:
is.defined <- function(sym) {
sym <- deparse(substitute(sym))
env <- parent.frame()
exists(sym, env)
}
is.defined(a)
# FALSE
a <- 10
is.defined(a)
# TRUE
edited Apr 17 '17 at 8:40
answered Apr 17 '17 at 6:32
NirmalNirmal
31125
31125
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
you can alsoforce
or evaluate it in the function like this:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
add a comment |
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
you can alsoforce
or evaluate it in the function like this:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
I wish people knew how sick this was. Good work.
– Carl Boneri
Jun 27 '17 at 18:36
you can also
force
or evaluate it in the function like this: is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
you can also
force
or evaluate it in the function like this: is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
– chinsoon12
Oct 4 '17 at 0:49
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%2f9368900%2fhow-to-check-if-object-variable-is-defined-in-r%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