r - 修复随机列表中的第一个和最后一个数字

标签 r random nodes

我使用此代码生成这些随机数(对应于图的边列表),以便 ( Generating Random Graphs According to Some Conditions ):

  • 第一个和最后一个“节点”相同(例如从“1”开始并在“1”结束)
  • 每个节点只被访问一次

见下文:

d = 15

relations = data.frame(tibble(
  from = sample(data$d),
  to = lead(from, default=from[1]),
))

> relations
   from to
1     1 11
2    11  7
3     7  5
4     5 10
5    10 13
6    13  9
7     9 15
8    15  2
9     2  3
10    3  4
11    4  8
12    8  6
13    6 12
14   12 14
15   14  1

如果我重新运行上面的代码,它(自然)会生成一个不同的列表:

relations
   from to
1     6  9
2     9  2
3     2  5
4     5  8
5     8 13
6    13  1
7     1 14
8    14  3
9     3 11
10   11 12
11   12  7
12    7 15
13   15  4
14    4 10
15   10  6
  • 我可以采取一些措施,以便每次生成一组新的随机数字时,都可以将第一个和最后一个数字固定为特定数字吗?

例如,我可以使第一个数字和最后一个数字始终为“7”吗?

#example 1
   from to
1     7 11
2    11  1
3     1  5
4     5 10
5    10 13
6    13  9
7     9 15
8    15  2
9     2  3
10    3  4
11    4  8
12    8  6
13    6 12
14   12 14
15   14  7

#example 2
   from to
1     7  9
2     9  2
3     2  5
4     5  8
5     8 13
6    13  1
7     1 14
8    14  3
9     3 11
10   11 12
11   12  6
12    6 15
13   15  4
14    4 10
15   10  7

在上面的示例(示例 1、示例 2)中,我选取了前两个随机列表,并手动将第一个数字和最后一个数字替换为 7 - 然后也替换了替换数字。

  • 但是有没有办法“自动”执行此操作而不是进行手动更正?

例如,我想我知道如何做到这一点:

#run twice to make sure the output is correct

  relations = data.frame(tibble(
      from = sample(data$d),
      to = lead(from, default=from[1]),
    ))
    
    orig_first = relations[1,1]
    
    
    relations[1,1] = 7
    relations[15,2] = 7
    
    relation = relations[-c(1,15),]
    r1 = relations[1,]
    r2 = relations[15,]
    
    final_relation = rbind(r1, relation, r2)

#output 1 : seems correct (starts with 7, ends with 7, all nodes visited exactly once)

   from to
1     7  8
2     8  4
3     4  7
4     7 13
5    13  1
6     1 14
7    14  6
8     6  9
9     9 11
10   11 10
11   10 12
12   12  2
13    2  5
14    5 15
15   15  7

#output 2: looks correct

   from to
1     7  9
2     9  2
3     2  1
4     1  6
5     6  3
6     3 10
7    10 11
8    11 14
9    14 12
10   12  7
11    7 13
12   13  4
13    4 15
14   15  8
15    8  7
  • 我这样做正确吗?有更简单的方法吗?

谢谢!

最佳答案

这里有一种方法可以做到这一点 -

library(dplyr)

set.seed(2021)
d = 15
fix_num <- 7

relations = tibble(
  from = c(fix_num, sample(setdiff(1:d, fix_num))),
  to = lead(from, default=from[1]),
)

relations

# A tibble: 15 x 2
#    from    to
#   <dbl> <dbl>
# 1     7     8
# 2     8     6
# 3     6    11
# 4    11    15
# 5    15     4
# 6     4    14
# 7    14     9
# 8     9    10
# 9    10     3
#10     3     5
#11     5    12
#12    12    13
#13    13     1
#14     1     2
#15     2     7

关于r - 修复随机列表中的第一个和最后一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71282863/

相关文章:

c - c/Unix 中的多个随机数生成器状态

javascript - 获取表中对应的元素

c# - 真正的随机不是真正的随机我真的很困惑

c - 使用 isdigit 的猜谜游戏程序

php - 如何为树结构开发数据库模式(有向无环图)

C - 删除链表中的节点

r - 如何分组制作频率条形图?

r - ggplot2中x轴上日期以下的工作日

r - quantmod barChart(或图表系列)格式选项

r - 在 R 中显示多个置信区间