[R] get() within function
Ivan Calandra
ivan.calandra at univ-reims.fr
Thu Aug 18 13:30:49 CEST 2016
Thank you Thomas,
Because of the error message, I focused only on get()... My bad!
Ivan
--
Ivan Calandra, PhD
Scientific Mediator
University of Reims Champagne-Ardenne
GEGENAA - EA 3795
CREA - 2 esplanade Roland Garros
51100 Reims, France
+33(0)3 26 77 36 89
ivan.calandra at univ-reims.fr
--
https://www.researchgate.net/profile/Ivan_Calandra
https://publons.com/author/705639/
Le 18/08/2016 à 13:00, Thomas Mailund a écrit :
>
> Hi Ivan,
>
> ls() inside a function gives you the variables in the local scope. If you want to get the variables defined in the global scope you need to tell ls() that.
>
> Check the difference between these three functions:
>
>> foo <- function() ls()
>> foo()
> Returns character(0) because there are no local variables.
>
>> bar <- function(x) ls()
>> bar(1)
> Returns “x” because ls() sees the function parameter
>
>> baz <- function() ls(envir = .GlobalEnv)
>> baz()
> Returns all the variables in the global environment.
>
> If you change your function foo() to this, it should work:
>
>
> foo <- function() {
> selected_names <- sapply(ls(.GlobalEnv),
> function(x) class(get(x))) %in% c("data.frame","list")
> df.list <- ls(.GlobalEnv)[selected_names]
> dat.str <- select.list(choices=df.list, title="Select object")
> dat <- get(dat.str)
> str(dat)
> }
>
> Cheers
> Thomas
>
>
>
>
>
>
> On 18 August 2016 at 12:21:33, Ivan Calandra (ivan.calandra at univ-reims.fr(mailto:ivan.calandra at univ-reims.fr)) wrote:
>
>> Dear useRs,
>>
>> For an interactive use, I am trying to write a function that looks for
>> all data.frames and lists in the environment and ask the user to select
>> one of them. I then run some operations on this object.
>>
>> This is what I am trying:
>>
>> foo <- function(){
>> df.list <- ls()[sapply(ls(), function(x) class(get(x))) %in%
>> c("data.frame","list")]
>> dat.str <- select.list(choices=df.list, title="Select object")
>> dat <- get(dat.str)
>> str(dat)
>> }
>>
>> Let's say I have these three objects:
>> vec <- 1:10
>> mylist <- list(1:3)
>> datf <- data.frame(var1=rnorm(10), var2=rnorm(10))
>>
>> I would like the function to show me only mylist and datf in the dialog
>> box. Everything works fine if I take the code out of the function, but
>> when I run foo() I get this error:
>> "Error in get(dat.str) : first argument incorrect"
>>
>> Is there a problem with using get() within a function? Maybe a problem
>> with environments?
>>
>> Thank you in advance for any help!
>> Ivan
>>
>> --
>> Ivan Calandra, PhD
>> Scientific Mediator
>> University of Reims Champagne-Ardenne
>> GEGENAA - EA 3795
>> CREA - 2 esplanade Roland Garros
>> 51100 Reims, France
>> +33(0)3 26 77 36 89
>> ivan.calandra at univ-reims.fr
>> --
>> https://www.researchgate.net/profile/Ivan_Calandra
>> https://publons.com/author/705639/
>>
>> ______________________________________________
>> R-help at 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