Assigning several lists to variables whose names are contained in other variables
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 <dwinsemius at comcast.net>:
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
<minshall at umich.edu>:
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
______________________________________________ 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.
- 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: grond at numberland.com URL: http://www.numberland.com [[alternative HTML version deleted]]
______________________________________________ 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. ______________________________________________ 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.
[[alternative HTML version deleted]]
______________________________________________ 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.