使用循环在R中创建一个大列表

使用循环在R中创建一个大列表,r,loops,matrix,R,Loops,Matrix,我对此有一个问题: 我需要创建一个矩阵列表。这是一个数据框: data=data.frame("Node"=c(1:5), posx=c(2,3,6,8,1), posy=c(1,1,4,7,8)) Node posx posy 1 1 2 1 2 2 3 1 3 3 6 4 4 4 8 7 5 5 1 8 现在我想创建一个矩阵列表。带回路。我想创建如下矩阵列表: l=list(l1,l2,l3,l4

我对此有一个问题:
我需要创建一个矩阵列表。这是一个数据框:

data=data.frame("Node"=c(1:5), posx=c(2,3,6,8,1), posy=c(1,1,4,7,8))
  Node posx posy
1    1    2    1
2    2    3    1
3    3    6    4
4    4    8    7
5    5    1    8
现在我想创建一个矩阵列表。带回路。我想创建如下矩阵列表:

l=list(l1,l2,l3,l4,l5)
其中:

l1=cbind(c(2),c(1))
l2=cbind(c(3),c(1))
l3=cbind(c(6),c(4))
l4=cbind(c(8),c(7))
l5=cbind(c(1),c(8))
以下是我的尝试:

for (i in 1:(data$Node) ) {
  l=list(cbind(c(data$posx[i]), (data$posy[i])))
}
试一试

或使用
data.table

library(data.table)
setDT(data)[,list(list(as.matrix(.SD))) , by=Node]$V1

您也可以通过以下方式使用

by(data[-1], data[1], as.matrix)

非常感谢!它正在工作!在这种情况下,如果我有一个额外的专栏呢?示例:data=data.frame(“节点”=c(1:5),posx=c(2,3,6,8,1),posy=c(1,1,4,7,8),rnd=c(“A”,“B”,“c”,“D”,“E”)。但我只想要数字?(没有最后一列?@sgtFury Try
lappy(split(data[,2:3],row(data)[,1]),as.matrix)
!谢谢你的回复!我想你对这个新问题想要的是
list2env(setNames(lappy(split)(as.matrix(data[,-1]),row(data)[,1]),matrix,ncol=2),paste0('mat',1:nrow(data))),envir=.GlobalEnv)
然后检查
mat1
mat2
是的,非常感谢!我为这个不太好的问题道歉。没问题,我对你真正想要的东西感到困惑。但是,我认为最好将其列在一个列表中,而不是作为单独的矩阵
lapply(split(as.matrix(data[,-1]),row(data)[,1]), matrix, ncol=2)
library(data.table)
setDT(data)[,list(list(as.matrix(.SD))) , by=Node]$V1
by(data[-1], data[1], as.matrix)