如何在行数变化时绑定向量和矩阵

问题描述:

在迭代算法中,我在每个步骤中确定一个或多个行或多个行以进行进一步计算。为了存储感兴趣的行,我必须绑定两个变量:X.id和X.val。我目前使用:如何在行数变化时绑定向量和矩阵

X.id <- matrix(1,nrow=2,3) 
X.val <- matrix(1,nrow=2,1)  
cbind(X.id,X.val) 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 1 1 
[2,] 1 1 1 1 

但不是当他们一行:

X.id <- c(1,1,1) 
X.val <- matrix(1,nrow=1,1) 
cbind(X.id,X.val) 

其中给出

cbind(X.id,X.val) 

它当X.id和X.val都是矩阵工作正常出现以下错误:

In cbind(c(1, 1, 1), matrix(1, nrow = 1, 1)) : number of rows of result is not a multiple of vector length (arg 1) 

该pro当行的数量是0,1和n时,求解解决方案应该工作,同时保存矩阵的维数!

+0

使用'rbind'绑定 – dickoa 2013-04-24 15:33:20

+1

您也可能会寻找[cbind.fill(http://*.com/q/7962267/行324364)。 – joran 2013-04-24 15:34:24

+3

我建议使用列表而不是矩阵来存储您的值。像'x = list()'然后迭代'x [[length(x)+1]] = your_vector'。 – cryo111 2013-04-24 15:40:44

我相信你正在寻找append(X.id,X.val)

+0

追加工作正常如果X.id和X.val有一行,但如果他们有多个它给一个向量,而不是矩阵 – WAF 2013-04-25 07:11:15

+0

@FWaldner你可能想让你的问题更清楚,然后提供一个失败的例子。 Append在您提供的示例中工作,并且afaik通过了您最初制定的条件。 – 2013-04-25 07:49:36

的问题是有点不清楚至于idvalue之间的关系。 您所寻求的解决方案很可能是使用list作为@ cyro111在评论中描述的。

使用cbind不会给你你想要的结果,因为它会强制X.id成列。 (当然,除非你是这样,否则你的问题有点不清楚)。

你也可以简单地使用c()作为

> c(X.id, X.val) 
[1] 1 1 1 1 
+0

同样,只有当X.id有一行 – WAF 2013-04-25 07:16:23

+0

@FWaldner时,它才能正常工作,正如Maxim.K所指出的那样,您的问题是非常不清楚的。如果你期望X.id是多维的,那么在你的问题中应该是明显的。 – 2013-04-25 14:43:36