On 30/01/2012 1:26 PM, Paul Johnson wrote:
A user question today has me stumped.  Can you advise me, please?

User wants a matrix that has some numbers, some variables, possibly
even some function names.  So that has to be a character matrix.

It might make more sense for it to be a list-mode matrix. Lists are vectors, and if they have dimension, they are matrices, but the entries need not be the same types.

Consider:

>  BM<- matrix("0.1", 5, 5)

Use data.entry(BM) or similar to set some to more abstract values.

>  BM[3,1]<- "a"
>  BM[4,2]<- "b"
>  BM[5,2]<- "b"
>  BM[5,3]<- "d"
>  BM
      var1  var2  var3  var4  var5
[1,] "0.1" "0.1" "0.1" "0.1" "0.1"
[2,] "0.1" "0.1" "0.1" "0.1" "0.1"
[3,] "a"   "0.1" "0.1" "0.1" "0.1"
[4,] "0.1" "b"   "0.1" "0.1" "0.1"
[5,] "0.1" "b"   "d" "0.1" "0.1"

Later on, user code will set values, e.g.,

a<- rnorm(1)
b<- 17
d<- 4

Now, push those into "BM", convert whole thing to numeric

newBM<- apply(BM, c(1,2), as.numeric)

and use newBM for some big calculation.

Then re-set new values for a, b, d, do the same over again.

I've been trying lots of variations on parse, substitute, and eval.

The most interesting function I learned about this morning was delayedAssign.
If I had only to work with one scalar, it does what I want

>  delayedAssign("a", whatA)
>  whatA<- 91
>  a
[1] 91

I can't see how to make that work in the matrix context, though.

Got ideas?

I don't think delayedAssign is what you want: it creates "promises", and promises can only be evaluated once. You want language entries in your matrix, and you want to use eval() to evaluate them. (Or character entries, and use Henrik's parseAndEval.)

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to