Add ComputeAssign
[openmx:openmx.git] / models / passing / ComputeAssign.R
1 library(OpenMx)
2
3 model <- mxModel("assign",
4                  mxMatrix(name="A", nrow=2, ncol=2, free=TRUE, values=1:4),
5                  mxMatrix(name="B", nrow=2, ncol=2, free=TRUE, values=0),
6                  mxComputeAssign('A', 'B'))
7 fit <- mxRun(model)
8 omxCheckEquals(fit@matrices$B@values, fit@matrices$A@values)
9
10 model <- mxModel("assign",
11                  mxMatrix(name="A", nrow=2, ncol=2, free=c(TRUE,TRUE,FALSE,FALSE), values=1:4),
12                  mxMatrix(name="B", nrow=2, ncol=2, free=TRUE, values=0),
13                  mxComputeAssign('A', 'B'))
14 fit <- mxRun(model)
15 omxCheckEquals(fit@matrices$B@values[,1], fit@matrices$A@values[,1])
16 omxCheckEquals(fit@matrices$B@values[,2], c(0,0))
17
18 model <- mxModel("assign",
19                  mxMatrix(name="A", nrow=2, ncol=2, free=TRUE, values=1:4),
20                  mxMatrix(name="B", nrow=2, ncol=2, free=FALSE, values=0),
21                  mxComputeAssign('A', 'B'))
22 omxCheckError(mxRun(model), "omxComputeAssign: assign.B[1,1] is fixed, cannot copy assign.A")
23
24 model <- mxModel("assign",
25                  mxMatrix(name="A", nrow=2, ncol=2, free=TRUE, values=1:4),
26                  mxMatrix(name="B", nrow=2, ncol=2, free=FALSE, values=0),
27                  mxComputeAssign('A', 'A'))
28 omxCheckError(mxRun(model), "omxComputeAssign: cannot copy assign.A to itself")
29
30 model <- mxModel("assign",
31                  mxMatrix(name="A", nrow=2, ncol=2, free=TRUE, values=1:4),
32                  mxMatrix(name="B", nrow=2, ncol=2, free=TRUE, values=0),
33                  mxMatrix(name="C", nrow=2, ncol=2, free=TRUE, values=0),
34                  mxComputeAssign(c('A','A'), c('B','C')))
35 omxCheckError(mxRun(model), "omxComputeAssign: cannot copy assign.A to more than 1 place")
36
37 omxCheckError(mxModel("assign",
38                       mxMatrix(name="A", nrow=2, ncol=2, free=TRUE, values=1:4),
39                       mxMatrix(name="B", nrow=2, ncol=2, free=TRUE, values=0),
40                       mxMatrix(name="C", nrow=2, ncol=2, free=TRUE, values=0),
41                       mxComputeAssign(c('A'), c('B','C'))),
42               "Arguments 'from' and 'to' must be the same length")