在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