简洁的方法来生成有序的线段坐标集

时间:2014-04-22 13:51:26

标签: r combinations

我写了一个快速的黑客来生成整数坐标上一个普通的老方块阵列中所有“单元格墙”端点的坐标。

dimx <- 4
dimy <- 5
xvert<-rep(1:(dimx+1),each=dimy)
yvert<-1:dimy
yvert<-rep(yvert,times=dimx+1)
vertwall<-cbind(xvert, xvert,yvert,yvert+1)

同样对于水平墙。感觉就像我刚刚重新发明了一些基本功能,所以:更快,更好,更清洁?

编辑:考虑细胞网格。左下角单元的两个感兴趣的墙具有坐标x,y对(1,1),(1,2)和(1,1),(2,1)。类似于固态物理中晶体单元的定义,这就是所需要的,因为下一个单元“向上”有墙(1,2),(1,3)和(1,2),(2, 2)等等。因此,在我的样本中重复“xvert”数据的原因。

2 个答案:

答案 0 :(得分:2)

我不确定你会尝试做什么(你的列名重复,这很令人困惑)。你可以试试这个例子:

df = expand.grid( yvert= seq_len(dimy),xver= seq_len(dimy))
transform(df,xvert1=xvert,yvert1=yvert+1)

CGW补充说完整性&#39;清酒:生成水平和垂直墙:

df = expand.grid( xvert= seq_len(dimx),yvert= seq_len(dimy))
transform(df,xvert1=xvert,yvert1=yvert+1) ->dfv
df2 <- expand.grid(yvert= seq_len(dimy), xvert= seq_len(dimx))
transform(df2,yvert1=yvert,xvert1=xvert+1) ->dfh
#  make x,y same order in both arrays
dfh[] <- dfh[,c(2,1,4,3)]

答案 1 :(得分:0)

expand.grid函数创建数组的笛卡尔积,它提供了您需要做的大部分工作。

expand.grid(x=1:5,y=1:5)