R定义一个没有值的矩阵

时间:2016-02-17 23:01:48

标签: r matrix

我正在尝试在R中编写一个函数,它将采用具有某种结构的Matrix,以及赋予该Matrix的值的列向量。

我是这样的:

         X^2 aXY 0                X^2  0   0
 Mat=    aYX Y^2 bYZ    or Mat1=  0   2X^2 0
         0   bZY Z^2              0    0   3X^2



c(X=1,Y=2,Z=3, a=.3,b=.2)   or   c(X=1)

然后矩阵将被赋予矢量的值,我可以在给定的矩阵上进行数学运算。

我在定义Matrix方面遇到了困难。我似乎无法定义一个空变量矩阵,以后会分配值。

我试过了

x=as.integer
y=as.integer
z=as.integer


Mat=matrix(c(x,0,0,0,y,0,0,0,z),nrow=3)
values=c(x=.5,y=2,z=3)  

但我不知道是否有可能给矩阵这些值。

我可以先定义变量的值,然后定义矩阵,但我认为这不是我想要的。即 -

x=.5;y=2,z=3;

Mat=matrix(c(x,0,0,0,y,0,0,0,z),nrow=3)

我的功能需要知道Matrix的结构以及值。我想要的唯一限制是它应该是一个协方差矩阵。 干杯

编辑 - 我应该指出,我的矩阵理想情况下不仅仅是3 * 3,而是任何大小的正方形,我可能想要一个变量用于下三角形中的每个位置。 (我的矩阵总是对称的。)

3 个答案:

答案 0 :(得分:0)

应用你的推理:

f <- function(a,b,x,y,z){matrix(c(x^2, a*x*y, 0, a*x*y, y^2, b*y*z, 0, b*z*y, z^2), nrow=3, ncol=3)}
# Use it!
f(.3,.2,1,2,3)

>
     [,1] [,2] [,3]
[1,]  1.0  0.6  0.0
[2,]  0.6  4.0  1.2
[3,]  0.0  1.2  9.0

应该直接在函数体内添加if语句来检查仅定义了X的情况的输入变量并返回备用表单。

请注意,可以使用cov()内置函数导出协方差矩阵。

答案 1 :(得分:0)

在与其他人交谈之后,我认为最简单的解决方案就是将可编辑的make.matrix功能作为sugested。这样,使用代码的人只需要编辑make.matrix函数以适合他们的设计,然后再调用它。谢谢你的帮助。

答案 2 :(得分:-1)

我相信这样的事情就是你所追求的,你可能喜欢将实际矩阵传递给函数,在这里,我已经将矩阵框架转换为矢量。

MakeMatrix<-function(X=0,Y=0,Z=0,MatrixForm){
    #Get the number of entrys in the matrix
    n<-length(MatrixForm)
    #create a matrix with sqrt(n) rows and columns (ie make it square)
    m<-matrix(nrow =sqrt(n), ncol = sqrt(n))

    #Start stroing data
    count = 1
    for(i in 1:sqrt(n)){
        for(j in 1:sqrt(n)){
            #Evaluates the line with the given values provided
            m[i,j]<-eval(parse(text=MatrixForm[count]))

        count = count + 1
        }
    }
    return(m)
}

MF<-c("X^2",0,0,0,"2*X^2",0,0,0,"3*X^2")
MakeMatrix(X=1,MatrixForm=MF)

>      
      [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    2    0
[3,]    0    0    3