I've been trying to prepare some wrappers for optimization objective functions 
and
gradients that use try() to check for computable functions. I'm also trying to 
do scaling
as per optim() so that a number of methods that are available on CRAN and 
R-Forge can use
parameter and function scaling. This got me into minor trouble when I scaled a 
gradient or
Hessian and the "inadmissible" attribute I had created suddenly disappeared. 
When I
discovered why -- that some operations don't preserve attributes -- I started 
to look for
a list of which ops preserve attributes and which don't. The code snippet below 
shows that
matrix multiplication (%*%) does not, while multiplication by a vector (simple 
*) does.
I'm not really surprised that some ops don't preserve attributes, particularly 
those that
are binary like multiplication, but it might be nice to know which operations 
and special
functions do so.

rm(list=ls())
m<-matrix(1:4,nrow=2, ncol=2)
print(m)
attributes(m)
attr(m,"check")<-"***"
attributes(m)
bigm<-10*m
str(bigm)
bigm1<-diag(c(1,1))%*%m
str(bigm1)
bigm1<-c(1,2)*m
str(bigm1)
print(bigm1)
arraym<-as.array(m)
str(arraym)
tanm<-tan(m)
str(tanm)


Best,

John Nash

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to