[R] When using require(), why do I get the error message "Error in if (!loaded) { : the condition has length > 1" ?

Kelly Thompson kt1572757 @end|ng |rom gm@||@com
Mon Oct 24 19:50:15 CEST 2022


Andrew,
Thanks. I reviewed the code for "require" and saw:
"if (!character.only)
        package <- as.character(substitute(package))"

#This helps me better understand what is going on. I am sharing this
here because I think it might help others understand.
as.character( substitute("this_pac_does_not_exist") ) #quoted

as.character( substitute( this_pac_does_not_exist ) ) #not quoted

as.character( substitute("this_pac_does_not_exist") ) == as.character(
substitute( this_pac_does_not_exist ) )

#####

packages_i_want_to_use <- c("this_pac_does_not_exist", "abcz")
as.character( substitute(packages_i_want_to_use[1] ) )
packages_i_want_to_use[1]
as.character( substitute(packages_i_want_to_use[1] ) ) ==
packages_i_want_to_use[1]

#To prevent substitute(packages_i_want_to_use[1] from getting changed
to as.character( substitute(packages_i_want_to_use[1] ) ), we need to
set character.only = TRUE

On Mon, Oct 24, 2022 at 12:53 PM Andrew Simmons <akwsimmo using gmail.com> wrote:
>
> In the first one, the argument is a character vector of length 1, so the code works perfectly fine.
>
> The second is a call, and when coerced to a character vector should look like
>
> c("[", "packages_i_want_to_use", "1")
>
> You can try this yourself with quote(packages_i_want_to_use[1]) which returns its first argument, unevaluated.
>
> On Mon, Oct 24, 2022, 12:46 Kelly Thompson <kt1572757 using gmail.com> wrote:
>>
>> Thanks!
>>
>> # Please, can you help me understand why
>> require( 'base' ) # works, but
>> require( packages_i_want_to_use[1] ) # does not work?
>>
>> # In require( 'base' ), what is the "first argument"?
>>
>> On Mon, Oct 24, 2022 at 12:29 PM Andrew Simmons <akwsimmo using gmail.com> wrote:
>> >
>> > require(), similarly to library(), does not evaluate its first argument UNLESS you add character.only = TRUE
>> >
>> > require( packages_i_want_to_use[1], character.only = TRUE)
>> >
>> >
>> > On Mon, Oct 24, 2022, 12:26 Kelly Thompson <kt1572757 using gmail.com> wrote:
>> >>
>> >> # Below, when using require(), why do I get the error message "Error
>> >> in if (!loaded) { : the condition has length > 1" ?
>> >>
>> >> # This is my reproducible code:
>> >>
>> >> #create a vector with the names of the packages I want to use
>> >> packages_i_want_to_use <- c('base', 'this_pac_does_not_exist')
>> >>
>> >> # Here I get error messages:
>> >> require( packages_i_want_to_use[1] )
>> >> #Error in if (!loaded) { : the condition has length > 1
>> >>
>> >> require( packages_i_want_to_use[2] )
>> >> #Error in if (!loaded) { : the condition has length > 1
>> >>
>> >> # Here I get what I expect:
>> >> require('base')
>> >>
>> >> require('this_pac_does_not_exist')
>> >> #Loading required package: this_pac_does_not_exist
>> >> #Warning message:
>> >> #In library(package, lib.loc = lib.loc, character.only = TRUE,
>> >> logical.return = TRUE,  :
>> >> #  there is no package called ‘this_pac_does_not_exist’
>> >>
>> >> ______________________________________________
>> >> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> >> https://stat.ethz.ch/mailman/listinfo/r-help
>> >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> >> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list