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 <dwinsem...@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
<minsh...@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@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: gr...@numberland.com
URL: http://www.numberland.com
[[alternative HTML version deleted]]
______________________________________________
R-help@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@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@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@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.