Assigning several lists to variables whose names are contained in other variables

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond
Dear all,

I'm creating a list (which is a tbl_graph) by a function, and assign the
result to a variable:

subnet_MYSUBNET <- my_function(MYSUBNET)

# MYSUBNET: a tbl_graph

Because there are multiple subnets to create, I can get the names of the
subnets (MYSUBNET1, MYSUBNET2, MYSUBNET3, etc.) from a row in a
dataframe column.

subnet_MYSUBNET <- my_function(datatable$column[i])

Because I know how many subnets to create - nrow(dataframe) I want to
assign the subnets to variables whose names contain the name of the subnet

For this to work I have to assign a variable name which is contained in
an other variable name:

#################

for(i in 1:nrow(datatable)) {

val <- datatable$column[i]

result <- assign(paste("subnet_",  val, sep = "")

result <- my_function(val)

}

this works in bash, but seems not to work in R - I don't succeed at least.

Am I wrong?

Where is my mistake?

Many thanks in advance for any hint.

Wolfgang



        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

PIKAL Petr
Hi


I may be wrong but

> result <- assign(paste("subnet_",  val, sep = "")
here you miss the right parentheses
maybe you intended
assign(result, paste("subnet_",  val, sep = ""))

> result <- my_function(val)
but here you change (rewrite) the result variable to my_function result

So your overall cycle gives you only one result variable containing last value
computed by my_function.

Cheers
Petr

> -----Original Message-----
> From: R-help <[hidden email]> On Behalf Of Wolfgang Grond
> Sent: Friday, April 9, 2021 11:49 AM
> To: mailman, r-help <[hidden email]>
> Subject: [R] Assigning several lists to variables whose names are contained
> in
> other variables
>
> Dear all,
>
> I'm creating a list (which is a tbl_graph) by a function, and assign the
> result to
> a variable:
>
> subnet_MYSUBNET <- my_function(MYSUBNET)
>
> # MYSUBNET: a tbl_graph
>
> Because there are multiple subnets to create, I can get the names of the
> subnets (MYSUBNET1, MYSUBNET2, MYSUBNET3, etc.) from a row in a
> dataframe column.
>
> subnet_MYSUBNET <- my_function(datatable$column[i])
>
> Because I know how many subnets to create - nrow(dataframe) I want to
> assign the subnets to variables whose names contain the name of the subnet
>
> For this to work I have to assign a variable name which is contained in an
> other variable name:
>
> #################
>
> for(i in 1:nrow(datatable)) {
>
> val <- datatable$column[i]
>
> result <- assign(paste("subnet_",  val, sep = "")
>
> result <- my_function(val)
>
> }
>
> this works in bash, but seems not to work in R - I don't succeed at least.
>
> Am I wrong?
>
> Where is my mistake?
>
> Many thanks in advance for any hint.
>
> Wolfgang
>
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Greg Minshall
In reply to this post by Wolfgang Grond
Wolfgang,

> result <- assign(paste("subnet_",  val, sep = "")
>
> result <- my_function(val)

i don't understand why you are twice assigning to =result=.  also, the
first assignment doesn't seem well formatted (t's missing a value?).

did you mean something like

: assign(paste("subnet_",  val, sep = ""), my_function(val))

(which i would think should work)?

cheers, Greg

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Ivan Krylov
In reply to this post by Wolfgang Grond
Dear Wolfgang,

On Fri, 9 Apr 2021 11:48:55 +0200
Wolfgang Grond <[hidden email]> wrote:

> I want to assign the subnets to variables whose names contain the
> name of the subnet

Apologies if this sounds too opinionated, but creating variable names
from variable values is a FAQ in a different dynamic language:

https://perldoc.perl.org/perlfaq7#How-can-I-use-a-variable-as-a-variable-name?

Most of the explanation doesn't apply to R, of course, but the main
idea here is to use data structures instead of causing (potential,
unlikely, but still) conflicts in the variable namespace. What if you
create a list of function values instead of just a bunch of variables?

results <- list()
for(i in 1:nrow(datatable)) {
        val <- datatable$column[i]
        results[[as.character(val)]] <- my_function(val)
}

Or even

results <- lapply(setNames(nm = datatable$column), my_function)

Wouldn't that be more convenient?

--
Best regards,
Ivan

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond-2
Dear Ivan,

when I try your solution with lapply as below I get the following error message:

Error in eval ... : object 'function' not found ( I think anything about my_function is meant).

Am 9. April 2021 13:43:57 MESZ schrieb Ivan Krylov <[hidden email]>:

>Dear Wolfgang,
>
>On Fri, 9 Apr 2021 11:48:55 +0200
>Wolfgang Grond <[hidden email]> wrote:
>
>> I want to assign the subnets to variables whose names contain the
>> name of the subnet
>
>Apologies if this sounds too opinionated, but creating variable names
>from variable values is a FAQ in a different dynamic language:
>
>https://perldoc.perl.org/perlfaq7#How-can-I-use-a-variable-as-a-variable-name?
>
>Most of the explanation doesn't apply to R, of course, but the main
>idea here is to use data structures instead of causing (potential,
>unlikely, but still) conflicts in the variable namespace. What if you
>create a list of function values instead of just a bunch of variables?
>
>results <- list()
>for(i in 1:nrow(datatable)) {
> val <- datatable$column[i]
> results[[as.character(val)]] <- my_function(val)
>}
>
>Or even
>
>results <- lapply(setNames(nm = datatable$column), my_function)
>
>Wouldn't that be more convenient?
>
>--
>Best regards,
>Ivan
>
>______________________________________________
>[hidden email] 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.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond-2
In reply to this post by Ivan Krylov
Ivan,

same situation when I try your list() solution:

Error in eval ... : object 'function' not found ( I think anything about my_function is meant).


Am 9. April 2021 13:43:57 MESZ schrieb Ivan Krylov <[hidden email]>:

>Dear Wolfgang,
>
>On Fri, 9 Apr 2021 11:48:55 +0200
>Wolfgang Grond <[hidden email]> wrote:
>
>> I want to assign the subnets to variables whose names contain the
>> name of the subnet
>
>Apologies if this sounds too opinionated, but creating variable names
>from variable values is a FAQ in a different dynamic language:
>
>https://perldoc.perl.org/perlfaq7#How-can-I-use-a-variable-as-a-variable-name?
>
>Most of the explanation doesn't apply to R, of course, but the main
>idea here is to use data structures instead of causing (potential,
>unlikely, but still) conflicts in the variable namespace. What if you
>create a list of function values instead of just a bunch of variables?
>
>results <- list()
>for(i in 1:nrow(datatable)) {
> val <- datatable$column[i]
> results[[as.character(val)]] <- my_function(val)
>}
>
>Or even
>
>results <- lapply(setNames(nm = datatable$column), my_function)
>
>Wouldn't that be more convenient?
>
>--
>Best regards,
>Ivan
>
>______________________________________________
>[hidden email] 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.


-
Numberland - Dr. Wolfgang Grond
Diplomphysiker, TQM-Assessor (EFQM)
Six Sigma Green Belt
Ingenieurbüro / Engineering Consultancy
Lohfeld 20, DE-95326 Kulmbach, Germany
Phone: +49 9221 6919131
Fax: +49 9221 6919156
Mail: [hidden email]
URL: http://www.numberland.com
        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond-2
In reply to this post by Greg Minshall
Greg,

here I get the error message:

Error my_function(val) :

cannot find function my_function.

Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall <[hidden email]>:

>Wolfgang,
>
>> result <- assign(paste("subnet_",  val, sep = "")
>>
>> result <- my_function(val)
>
>i don't understand why you are twice assigning to =result=.  also, the
>first assignment doesn't seem well formatted (t's missing a value?).
>
>did you mean something like
>
>: assign(paste("subnet_",  val, sep = ""), my_function(val))
>
>(which i would think should work)?
>
>cheers, Greg
>
>______________________________________________
>[hidden email] 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.


-
Numberland - Dr. Wolfgang Grond
Diplomphysiker, TQM-Assessor (EFQM)
Six Sigma Green Belt
Ingenieurbüro / Engineering Consultancy
Lohfeld 20, DE-95326 Kulmbach, Germany
Phone: +49 9221 6919131
Fax: +49 9221 6919156
Mail: [hidden email]
URL: http://www.numberland.com
        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Rui Barradas
Hello,

my_function seems to be a function you have defined somewhere in your code.
In your original post you mention it 3 times, this is the first one:


subnet_MYSUBNET <- my_function(MYSUBNET)


So Ivan's and Greg's code should work, they use a function you haven't
posted but is assumed to exist.

Note: if you are more comfortable with for loops than with *apply, I
would rewrite Ivan's for loop solution as


results <- vector("list", length = nrow(datatable))
for(val in datatable$column) {
        results[[as.character(val)]] <- my_function(val)
}


To keep extending a vector or list object in a loop is inefficient, this
creates the list with the right length beforehand.


Hope this helps,

Rui Barradas

Às 13:21 de 09/04/21, Wolfgang Grond escreveu:

> Greg,
>
> here I get the error message:
>
> Error my_function(val) :
>
> cannot find function my_function.
>
> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall <[hidden email]>:
>> Wolfgang,
>>
>>> result <- assign(paste("subnet_",  val, sep = "")
>>>
>>> result <- my_function(val)
>>
>> i don't understand why you are twice assigning to =result=.  also, the
>> first assignment doesn't seem well formatted (t's missing a value?).
>>
>> did you mean something like
>>
>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
>>
>> (which i would think should work)?
>>
>> cheers, Greg
>>
>> ______________________________________________
>> [hidden email] 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.
>
>
> -
> Numberland - Dr. Wolfgang Grond
> Diplomphysiker, TQM-Assessor (EFQM)
> Six Sigma Green Belt
> Ingenieurbüro / Engineering Consultancy
> Lohfeld 20, DE-95326 Kulmbach, Germany
> Phone: +49 9221 6919131
> Fax: +49 9221 6919156
> Mail: [hidden email]
> URL: http://www.numberland.com
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond-2
Folks,

first of all - thanks a lot for your hints!

I will try each again and think about, why I get error messages.

But to resume: if I understand you right:

there is no way to do something like this:

$name = $result?

Regards

Wolfgang

Am 9. April 2021 15:43:27 MESZ schrieb Rui Barradas <[hidden email]>:

>Hello,
>
>my_function seems to be a function you have defined somewhere in your
>code.
>In your original post you mention it 3 times, this is the first one:
>
>
>subnet_MYSUBNET <- my_function(MYSUBNET)
>
>
>So Ivan's and Greg's code should work, they use a function you haven't
>posted but is assumed to exist.
>
>Note: if you are more comfortable with for loops than with *apply, I
>would rewrite Ivan's for loop solution as
>
>
>results <- vector("list", length = nrow(datatable))
>for(val in datatable$column) {
> results[[as.character(val)]] <- my_function(val)
>}
>
>
>To keep extending a vector or list object in a loop is inefficient,
>this
>creates the list with the right length beforehand.
>
>
>Hope this helps,
>
>Rui Barradas
>
>Às 13:21 de 09/04/21, Wolfgang Grond escreveu:
>> Greg,
>>
>> here I get the error message:
>>
>> Error my_function(val) :
>>
>> cannot find function my_function.
>>
>> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall
><[hidden email]>:
>>> Wolfgang,
>>>
>>>> result <- assign(paste("subnet_",  val, sep = "")
>>>>
>>>> result <- my_function(val)
>>>
>>> i don't understand why you are twice assigning to =result=.  also,
>the
>>> first assignment doesn't seem well formatted (t's missing a value?).
>>>
>>> did you mean something like
>>>
>>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
>>>
>>> (which i would think should work)?
>>>
>>> cheers, Greg
>>>
>>> ______________________________________________
>>> [hidden email] 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.
>>
>>
>> -
>> Numberland - Dr. Wolfgang Grond
>> Diplomphysiker, TQM-Assessor (EFQM)
>> Six Sigma Green Belt
>> Ingenieurbüro / Engineering Consultancy
>> Lohfeld 20, DE-95326 Kulmbach, Germany
>> Phone: +49 9221 6919131
>> Fax: +49 9221 6919156
>> Mail: [hidden email]
>> URL: http://www.numberland.com
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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.
>>
>
>______________________________________________
>[hidden email] 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.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

David Winsemius
In reply to this post by Wolfgang Grond-2

On 4/9/21 5:21 AM, Wolfgang Grond wrote:
> Greg,
>
> here I get the error message:
>
> Error my_function(val) :
>
> cannot find function my_function.

I'm guessing that you are following someone else's blog and have failed
one of two things:

- understand that what was meant by the author was that you were assumed
to have a function in mind to use for a programming strategy being
illustrated

- or you were copying and pasting only part of a blog and failed to
paste in the code from above where there was earlier code defining
`my_function`

>
> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall <[hidden email]>:
>> Wolfgang,
>>
>>> result <- assign(paste("subnet_",  val, sep = "")
>>>
>>> result <- my_function(val)
>> i don't understand why you are twice assigning to =result=.  also, the
>> first assignment doesn't seem well formatted (t's missing a value?).
>>
>> did you mean something like
>>
>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
>>
>> (which i would think should work)?
>>
>> cheers, Greg
>>
>> ______________________________________________
>> [hidden email] 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.
>
> -
> Numberland - Dr. Wolfgang Grond
> Diplomphysiker, TQM-Assessor (EFQM)
> Six Sigma Green Belt
> Ingenieurbüro / Engineering Consultancy
> Lohfeld 20, DE-95326 Kulmbach, Germany
> Phone: +49 9221 6919131
> Fax: +49 9221 6919156
> Mail: [hidden email]
> URL: http://www.numberland.com
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond-2
David,

I don't think that this is the case.

When I do the calculation like this

subnet_MYSUBNET <- my_function(MYSUBNET),

i.e. assigning a variable by hand to each function result, all is fine.



Am 9. April 2021 17:22:05 MESZ schrieb David Winsemius <[hidden email]>:

>
>On 4/9/21 5:21 AM, Wolfgang Grond wrote:
>> Greg,
>>
>> here I get the error message:
>>
>> Error my_function(val) :
>>
>> cannot find function my_function.
>
>I'm guessing that you are following someone else's blog and have failed
>
>one of two things:
>
>- understand that what was meant by the author was that you were
>assumed
>to have a function in mind to use for a programming strategy being
>illustrated
>
>- or you were copying and pasting only part of a blog and failed to
>paste in the code from above where there was earlier code defining
>`my_function`
>
>>
>> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall
><[hidden email]>:
>>> Wolfgang,
>>>
>>>> result <- assign(paste("subnet_",  val, sep = "")
>>>>
>>>> result <- my_function(val)
>>> i don't understand why you are twice assigning to =result=.  also,
>the
>>> first assignment doesn't seem well formatted (t's missing a value?).
>>>
>>> did you mean something like
>>>
>>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
>>>
>>> (which i would think should work)?
>>>
>>> cheers, Greg
>>>
>>> ______________________________________________
>>> [hidden email] 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.
>>
>> -
>> Numberland - Dr. Wolfgang Grond
>> Diplomphysiker, TQM-Assessor (EFQM)
>> Six Sigma Green Belt
>> Ingenieurbüro / Engineering Consultancy
>> Lohfeld 20, DE-95326 Kulmbach, Germany
>> Phone: +49 9221 6919131
>> Fax: +49 9221 6919156
>> Mail: [hidden email]
>> URL: http://www.numberland.com
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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.
>
>______________________________________________
>[hidden email] 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.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Wolfgang Grond-2
In reply to this post by David Winsemius
As I wrote before, I calculate tbl_graph objects, which will be joined afterwards. Not too much, the number of graphs to calculate is in the range between 5 to 20.

Further steps are not automated, because they depend on how the single graphs look like, and which of them will be joined.

For this reason I thought it would be nice to have the single tbl_ graph objects stored in variables having the name of the graph.

For this reason I tried to find a better solution instead of assigning each graph by hand:

subnet_MYSUBNET <- my_function(MYSUBNET)

To my understanding it is therefore neccessary to assign the result of the function to a variable whose name consists of a fixed string and the content of a further variable.

That was the intention for me to ask.

Am 9. April 2021 17:22:05 MESZ schrieb David Winsemius <[hidden email]>:

>
>On 4/9/21 5:21 AM, Wolfgang Grond wrote:
>> Greg,
>>
>> here I get the error message:
>>
>> Error my_function(val) :
>>
>> cannot find function my_function.
>
>I'm guessing that you are following someone else's blog and have failed
>
>one of two things:
>
>- understand that what was meant by the author was that you were
>assumed
>to have a function in mind to use for a programming strategy being
>illustrated
>
>- or you were copying and pasting only part of a blog and failed to
>paste in the code from above where there was earlier code defining
>`my_function`
>
>>
>> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall
><[hidden email]>:
>>> Wolfgang,
>>>
>>>> result <- assign(paste("subnet_",  val, sep = "")
>>>>
>>>> result <- my_function(val)
>>> i don't understand why you are twice assigning to =result=.  also,
>the
>>> first assignment doesn't seem well formatted (t's missing a value?).
>>>
>>> did you mean something like
>>>
>>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
>>>
>>> (which i would think should work)?
>>>
>>> cheers, Greg
>>>
>>> ______________________________________________
>>> [hidden email] 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.
>>
>> -
>> Numberland - Dr. Wolfgang Grond
>> Diplomphysiker, TQM-Assessor (EFQM)
>> Six Sigma Green Belt
>> Ingenieurbüro / Engineering Consultancy
>> Lohfeld 20, DE-95326 Kulmbach, Germany
>> Phone: +49 9221 6919131
>> Fax: +49 9221 6919156
>> Mail: [hidden email]
>> URL: http://www.numberland.com
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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.
>
>______________________________________________
>[hidden email] 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.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Bert Gunter-2
I freely admit that I do not understand what you mean. But it sounds like
you are trying to make things more complicated than necessary.

Perhaps this little example may help clarify the issues:


> a <- 1; b <- 2; d <- c(3,5)
> stuff <- lapply(list(a,b,d),function(x)x^2)
> stuff
[[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1]  9 25

> stuff[[3]]
[1]  9 25

Note that one may apply (almost) any function that returns objects (and
doesn't have nasty side effects, I suppose), including graphical objects,
and store them in the list that is returned. These objects can then be
accessed as usual and manipulated/displayed/assigned ... whatever.

If this misunderstands your query and is irrelevant, do not bother to
explain. Or reply. Won't be the first time I did not get it.

If OTOH this is a complete mystery to you, then you need to spend some time
learning about R lists and how. to use them.

Cheers,
Bert



Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Fri, Apr 9, 2021 at 7:22 PM Wolfgang Grond <[hidden email]> wrote:

> As I wrote before, I calculate tbl_graph objects, which will be joined
> afterwards. Not too much, the number of graphs to calculate is in the range
> between 5 to 20.
>
> Further steps are not automated, because they depend on how the single
> graphs look like, and which of them will be joined.
>
> For this reason I thought it would be nice to have the single tbl_ graph
> objects stored in variables having the name of the graph.
>
> For this reason I tried to find a better solution instead of assigning
> each graph by hand:
>
> subnet_MYSUBNET <- my_function(MYSUBNET)
>
> To my understanding it is therefore neccessary to assign the result of the
> function to a variable whose name consists of a fixed string and the
> content of a further variable.
>
> That was the intention for me to ask.
>
> Am 9. April 2021 17:22:05 MESZ schrieb David Winsemius <
> [hidden email]>:
> >
> >On 4/9/21 5:21 AM, Wolfgang Grond wrote:
> >> Greg,
> >>
> >> here I get the error message:
> >>
> >> Error my_function(val) :
> >>
> >> cannot find function my_function.
> >
> >I'm guessing that you are following someone else's blog and have failed
> >
> >one of two things:
> >
> >- understand that what was meant by the author was that you were
> >assumed
> >to have a function in mind to use for a programming strategy being
> >illustrated
> >
> >- or you were copying and pasting only part of a blog and failed to
> >paste in the code from above where there was earlier code defining
> >`my_function`
> >
> >>
> >> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall
> ><[hidden email]>:
> >>> Wolfgang,
> >>>
> >>>> result <- assign(paste("subnet_",  val, sep = "")
> >>>>
> >>>> result <- my_function(val)
> >>> i don't understand why you are twice assigning to =result=.  also,
> >the
> >>> first assignment doesn't seem well formatted (t's missing a value?).
> >>>
> >>> did you mean something like
> >>>
> >>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
> >>>
> >>> (which i would think should work)?
> >>>
> >>> cheers, Greg
> >>>
> >>> ______________________________________________
> >>> [hidden email] 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.
> >>
> >> -
> >> Numberland - Dr. Wolfgang Grond
> >> Diplomphysiker, TQM-Assessor (EFQM)
> >> Six Sigma Green Belt
> >> Ingenieurbüro / Engineering Consultancy
> >> Lohfeld 20, DE-95326 Kulmbach, Germany
> >> Phone: +49 9221 6919131
> >> Fax: +49 9221 6919156
> >> Mail: [hidden email]
> >> URL: http://www.numberland.com
> >>      [[alternative HTML version deleted]]
> >>
> >> ______________________________________________
> >> [hidden email] 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.
> >
> >______________________________________________
> >[hidden email] 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.
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Assigning several lists to variables whose names are contained in other variables

Rui Barradas
In reply to this post by Wolfgang Grond-2
Hello,

I believe that the point we are missing is that datatable$column stores
the *names* of the graphs, not the graph objects themselves. So in the
loop the objects must be retrieved with mget() or get().

First create a reproducible example.



library(tidygraph)

my_function <- function(g){
   stopifnot(inherits(g, "igraph"))
   g %>% mutate(centrality = centrality_pagerank())
}

MYSUBNET1 <- create_notable('bull')
iris_clust <- hclust(dist(iris[1:4]))
MYSUBNET2 <- as_tbl_graph(iris_clust)
MYSUBNET3 <- play_smallworld(1, 100, 3, 0.05)

datatable <- data.frame(column = paste0("MYSUBNET", 1:3))



Now apply the function above to each of the "tbl_graph" objects.

1. Get all objects and apply the function in one instruction. Then
assign the new names.


result <- lapply(mget(datatable$column, envir = .GlobalEnv), my_function)
names(result) <- paste("subnet", datatable$column, sep = "_")


2. Loop through the column with lapply, getting one object and applying
the function one at a time. Then assign the new names.



result2 <- lapply(datatable$column, function(net_name){
   NET <- get(net_name, envir = .GlobalEnv)
   my_function(NET)
})
names(result2) <- paste("subnet", datatable$column, sep = "_")



3. Loop through the column with a for loop, getting one object and
applying the function one at a time. Then assign the new names.



result3 <- vector("list", length = nrow(datatable))
for(i in seq_along(datatable$column)){
   net_name <- datatable$column[i]
   NET <- get(net_name, envir = .GlobalEnv)
   result3[[i]] <- my_function(NET)
}
names(result3) <- paste("subnet", datatable$column, sep = "_")



4. Now check that all 3 solutions give the same result.


identical(result, result2)
#[1] TRUE
identical(result, result3)
#[1] TRUE


Is this it?

Rui Barradas


Às 17:23 de 09/04/21, Wolfgang Grond escreveu:

> As I wrote before, I calculate tbl_graph objects, which will be joined afterwards. Not too much, the number of graphs to calculate is in the range between 5 to 20.
>
> Further steps are not automated, because they depend on how the single graphs look like, and which of them will be joined.
>
> For this reason I thought it would be nice to have the single tbl_ graph objects stored in variables having the name of the graph.
>
> For this reason I tried to find a better solution instead of assigning each graph by hand:
>
> subnet_MYSUBNET <- my_function(MYSUBNET)
>
> To my understanding it is therefore neccessary to assign the result of the function to a variable whose name consists of a fixed string and the content of a further variable.
>
> That was the intention for me to ask.
>
> Am 9. April 2021 17:22:05 MESZ schrieb David Winsemius <[hidden email]>:
>>
>> On 4/9/21 5:21 AM, Wolfgang Grond wrote:
>>> Greg,
>>>
>>> here I get the error message:
>>>
>>> Error my_function(val) :
>>>
>>> cannot find function my_function.
>>
>> I'm guessing that you are following someone else's blog and have failed
>>
>> one of two things:
>>
>> - understand that what was meant by the author was that you were
>> assumed
>> to have a function in mind to use for a programming strategy being
>> illustrated
>>
>> - or you were copying and pasting only part of a blog and failed to
>> paste in the code from above where there was earlier code defining
>> `my_function`
>>
>>>
>>> Am 9. April 2021 12:35:40 MESZ schrieb Greg Minshall
>> <[hidden email]>:
>>>> Wolfgang,
>>>>
>>>>> result <- assign(paste("subnet_",  val, sep = "")
>>>>>
>>>>> result <- my_function(val)
>>>> i don't understand why you are twice assigning to =result=.  also,
>> the
>>>> first assignment doesn't seem well formatted (t's missing a value?).
>>>>
>>>> did you mean something like
>>>>
>>>> : assign(paste("subnet_",  val, sep = ""), my_function(val))
>>>>
>>>> (which i would think should work)?
>>>>
>>>> cheers, Greg
>>>>
>>>> ______________________________________________
>>>> [hidden email] 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.
>>>
>>> -
>>> Numberland - Dr. Wolfgang Grond
>>> Diplomphysiker, TQM-Assessor (EFQM)
>>> Six Sigma Green Belt
>>> Ingenieurbüro / Engineering Consultancy
>>> Lohfeld 20, DE-95326 Kulmbach, Germany
>>> Phone: +49 9221 6919131
>>> Fax: +49 9221 6919156
>>> Mail: [hidden email]
>>> URL: http://www.numberland.com
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> [hidden email] 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.
>>
>> ______________________________________________
>> [hidden email] 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.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.