在R中的循环内创建向量

在R中的循环内创建向量,r,tree,nested-loops,R,Tree,Nested Loops,我有以下代码: generator <- function(n){ nodes <- c() distances <- c() for (main in 1:n){ for (i in 1:n) { for (j in 1:n){ if (main != i & i != j & main != j & i < j){ nodes <- c(nodes, paste(

我有以下代码:

    generator <- function(n){
  nodes <- c()
  distances <- c()
  for (main in 1:n){
    for (i in 1:n) {
      for (j in 1:n){
        if (main != i & i != j & main != j & i < j){
          nodes <- c(nodes, paste(main, i, j, sep=",", collapse=""))
          distances <- c(distances, main+i+j)}}}}
  data <- data.frame(nodes, distances)
  return(data)}
我希望“节点”列中的项目是实际的值向量,目的是比较不同的三元组节点并找到公共成员。它目前只是一个字符串。例如,我希望
a$nodes[1][1]
,生成
1
,或者类似的内容,这样我就可以从
节点
三元组中提取每个单独的值

我目前有
paste(main,I,j,sep=“,”)
,我尝试用
c(main,I,j)
替换它,但结果是我得到了一个36行而不是12行的数据帧:每个节点都是自己的行


多谢各位

您需要使用列表列来执行您想要执行的操作

我建议使用TIBLES而不是常规数据帧,它们对于这类工作更方便


如果你想坚持使用base
R
你可以替换
数据你可以添加库调用吗?这里有很多用户定义的函数和模拟数据,这是不必要的。你可能想修改你的示例,使其可复制,你会得到更高质量的答案,对未来的读者更有帮助。谢谢你的反馈,这个例子现在可以复制了。
      nodes distances
1  1,2,3         6
2  1,2,4         7
3  1,3,4         8
4  2,1,3         6
5  2,1,4         7
6  2,3,4         9
7  3,1,2         6
8  3,1,4         8
9  3,2,4         9
10 4,1,2         7
11 4,1,3         8
12 4,2,3         9
data <- data.frame(distances)
data$nodes <- nodes  
generator <- function(n){
  nodes <- list()      # changed this from `c()` to `list()`
  distances <- c()
  for (main in 1:n){
    for (i in 1:n) {
      for (j in 1:n){
        if (main != i & i != j & main != j & i < j){
          nodes <- append(nodes, list(c(main, i, j))) # changed this to append a list instead of a vector
          distances <- c(distances, main+i+j)}}}}
  data <- tibble::tibble(nodes, distances) # changed `data.frame` to `tibble`
  return(data)}
df <- generator(4)

df
# A tibble: 12 x 2
#        nodes distances
#      <list>     <int>
#  1 <int [3]>         6
#  2 <int [3]>         7
#  3 <int [3]>         8
#  4 <int [3]>         6
#  5 <int [3]>         7
#  6 <int [3]>         9
#  7 <int [3]>         6
#  8 <int [3]>         8
#  9 <int [3]>         9
# 10 <int [3]>         7
# 11 <int [3]>         8
# 12 <int [3]>         9

df$nodes[[1]]
# [1] 1 2 3