我正在尝试编写一个函数,该函数将微调与R中的布局矩阵配合使用的图形中的节点。我主要使用ggraph
,因此将其设为dplyr
-esque是重要。
当我想向正方向微调时,我的功能运作良好,但对负方向却微不足道。我尝试将自变量包装在参数周围,但是似乎不起作用。有任何想法吗?这是一个示例:
生成适用于R中大多数图形包的布局矩阵。
set.seed(123)
layout <- matrix(nrow = 5, ncol = 2, sample(seq(0, 1, .1), 10, T))
定义我的用户功能,该功能使用matrix
,将其转换为tibble
,然后使用mutate
和ifelse
。
layout_nudge <- function(layout.,
node. = 1,
x. = 0,
y. = 0){
as.tibble(layout.) %>%
set_names('x.', 'y.') %>%
mutate(id = row_number(),
x. = ifelse(id == node., x. + x, x.),
y. = ifelse(id == node., y. + y, y.))
}
## ADDITION
# Works
# Convert to a tibble,
# For node 1, add 1 to column x
# For node 1, add 1 to column y
layout_nudge(layout, 1, 1, 1)
# A tibble: 5 x 3
x. y. id
<dbl> <dbl> <int>
1 1.9 0.7 1
2 0.7 0.5 2
3 0.7 0.6 3
4 1 0.3 4
5 0.7 0.1 5
## SUBTRACTION
# Does not work
# Convert to a tibble,
# For node 1, subtract 1 from column x
# For node 1, subtract 1 from column y
layout_nudge(layout, 1, -1, -1)
# A tibble: 5 x 3
x. y. id
<dbl> <dbl> <int>
1 1.9 0.7 1
2 0.7 0.5 2
3 0.7 0.6 3
4 1 0.3 4
5 0.7 0.1 5
答案 0 :(得分:1)
无法重现您的问题。如果我编辑函数(例如,函数头中的x.
和y.
已分别更改为x1
和y1
),则效果很好
layout_nudge <- function(layout.,
node. = 1,
x1 = 0,
y1 = 0){
as.tibble(layout.) %>%
set_names('x.', 'y.') %>%
mutate(id = row_number(),
x. = ifelse(id == node., x. + x1, x.),
y. = ifelse(id == node., y. + y1, y.))
}