[R] replacing characters in matrix. substitute, delayedAssign, huh?

Paul Johnson pauljohn32 at gmail.com
Mon Jan 30 19:26:46 CET 2012


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.
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?

pj

> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_2.14.1

-- 
Paul E. Johnson
Professor, Political Science
1541 Lilac Lane, Room 504
University of Kansas



More information about the R-help mailing list