使用 switch() 在 R 中使用函数分配图形属性
Assigning graph attributes using a function in R using switch()
我有一个跟进问题 。
我想构建一个函数,根据特定参数(在下面的示例中称为 lev
)将属性分配给图形。这是我的玩具图:
toy.graph <- graph.formula(121-221,121-345,121-587,345-587,221-587,490,588)
这是一个示例函数:
deco2 <- function(x, lev){
switch(lev,
one = {V(x)$color <- "red"},
two = {V(x)$color <- "yellow"})
return(x)
}
似乎 color
属性被添加到我的图表中:
toy.graph <- deco2(toy.graph, lev="one")
> toy.graph
IGRAPH UN-- 6 5 --
+ attr: name (v/c), color (v/c)
但是,当我打印属性值时,结果发现它们不存在:
> toy.graph$color
NULL
我错过了什么?
EDIT 当我只有一种颜色时,分配 y
的解决方案非常有效。但是,当我想在每个 switch
选项中分配多种颜色时,我仍然遇到问题。这是我对 y
作业的尝试:
V(toy.graph)$gender <- sample(c("M","F"), 6, replace = TRUE)
V(toy.graph)$gender
[1] "M" "F" "F" "M" "F" "M"
deco2 <- function(x, lev){
y <- switch(lev,
one = {V(x)$color = "red"},
two = {V(x)[gender == "F"]$color = "yellow"
V(x)[gender == "M"]$color = "green"})
V(x)$color <- y
return(x)
}
出于某种原因,我只能分配 "green"
颜色:
toy.graph <- deco2(toy.graph, lev="two")
toy.graph
IGRAPH UN-- 6 5 --
+ attr: name (v/c), gender (v/c), color (v/c)
V(toy.graph)$color
[1] "green" "green" "green" "green" "green" "green"
这看起来像你想要的:
library(igraph)
toy.graph <- graph.formula(121-221,121-345,121-587,345-587,221-587,490,588)
deco2 <- function(x, lev){
#make sure you assign switch's output to a variable (e.g. y)
y <-
switch(lev,
one = "red",
two = "yellow")
V(x)$color <- y
x
}
toy.graph <- deco2(toy.graph, lev="one")
> V(toy.graph)$color
[1] "red" "red" "red" "red" "red" "red"
我认为在 switch
中给 x 赋值不是一个好主意。而是将 switch
用于它的设计,即 return 对应于您的输入的值,然后在下一步中将该值分配给您的对象。
这样就可以正常工作了!
我有一个跟进问题
我想构建一个函数,根据特定参数(在下面的示例中称为 lev
)将属性分配给图形。这是我的玩具图:
toy.graph <- graph.formula(121-221,121-345,121-587,345-587,221-587,490,588)
这是一个示例函数:
deco2 <- function(x, lev){
switch(lev,
one = {V(x)$color <- "red"},
two = {V(x)$color <- "yellow"})
return(x)
}
似乎 color
属性被添加到我的图表中:
toy.graph <- deco2(toy.graph, lev="one")
> toy.graph
IGRAPH UN-- 6 5 --
+ attr: name (v/c), color (v/c)
但是,当我打印属性值时,结果发现它们不存在:
> toy.graph$color
NULL
我错过了什么?
EDIT 当我只有一种颜色时,分配 y
的解决方案非常有效。但是,当我想在每个 switch
选项中分配多种颜色时,我仍然遇到问题。这是我对 y
作业的尝试:
V(toy.graph)$gender <- sample(c("M","F"), 6, replace = TRUE)
V(toy.graph)$gender
[1] "M" "F" "F" "M" "F" "M"
deco2 <- function(x, lev){
y <- switch(lev,
one = {V(x)$color = "red"},
two = {V(x)[gender == "F"]$color = "yellow"
V(x)[gender == "M"]$color = "green"})
V(x)$color <- y
return(x)
}
出于某种原因,我只能分配 "green"
颜色:
toy.graph <- deco2(toy.graph, lev="two")
toy.graph
IGRAPH UN-- 6 5 --
+ attr: name (v/c), gender (v/c), color (v/c)
V(toy.graph)$color
[1] "green" "green" "green" "green" "green" "green"
这看起来像你想要的:
library(igraph)
toy.graph <- graph.formula(121-221,121-345,121-587,345-587,221-587,490,588)
deco2 <- function(x, lev){
#make sure you assign switch's output to a variable (e.g. y)
y <-
switch(lev,
one = "red",
two = "yellow")
V(x)$color <- y
x
}
toy.graph <- deco2(toy.graph, lev="one")
> V(toy.graph)$color
[1] "red" "red" "red" "red" "red" "red"
我认为在 switch
中给 x 赋值不是一个好主意。而是将 switch
用于它的设计,即 return 对应于您的输入的值,然后在下一步中将该值分配给您的对象。
这样就可以正常工作了!