我正在尝试在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,而是任何大小的正方形,我可能想要一个变量用于下三角形中的每个位置。 (我的矩阵总是对称的。)
答案 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