定义用户功能以添加/减去小标题

时间:2019-03-13 12:40:32

标签: r function dplyr

我正在尝试编写一个函数,该函数将微调与R中的布局矩阵配合使用的图形中的节点。我主要使用ggraph,因此将其设为dplyr-esque是重要。

当我想向正方向微调时,我的功能运作良好,但对负方向却微不足道。我尝试将自变量包装在参数周围,但是似乎不起作用。有任何想法吗?这是一个示例:

生成适用于R中大多数图形包的布局矩阵。

set.seed(123)
layout <- matrix(nrow = 5, ncol = 2, sample(seq(0, 1, .1), 10, T))

定义我的用户功能,该功能使用matrix,将其转换为tibble,然后使用mutateifelse

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

1 个答案:

答案 0 :(得分:1)

无法重现您的问题。如果我编辑函数(例如,函数头中的x.y.已分别更改为x1y1),则效果很好

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.))
}