Dear R users,
I have some troubles with dealing with tclObj objects. I try to explain
it with a toy example:
Say I define the following tcl procedure which just prints out each list
element
library(tcltk)
.Tcl('proc test {myList} {
    foreach i $myList {
      puts stdout  $i
    }
}')
and I call it with:
> tcl('test',letters[1:5])    # Works as expected
Now say I define a tcl variable first:
> a <- tclVar("")
> tclObj(a) <- as.tclObj(letters[1:5])
> tcl('set',a)  # output list
However
> tcl('test',a) # does not work as expected, returns the variable
name
Why not? In fact, how do get the name of the "a" list in tcl
(something
like RTcl...) so I could use it as follows> .Tcl('test $RTcl1') #works
Loops are much quicker in tcl than in R, hence I try to do some
computations in tcl and not via wrapper function in R. I therefore need
a way to easily access tcl variables from within R and tcl.
Thanks for any help,
Adrian Waddell
On Thu, Aug 12, 2010 at 2:14 PM, Adrian Waddell <ml_a at waddell.ch> wrote:> Dear R users, > > I have some troubles with dealing with tclObj objects. I try to explain > it with a toy example: > > Say I define the following tcl procedure which just prints out each list > element > > library(tcltk) > .Tcl('proc test {myList} { > ? ?foreach i $myList { > ? ? ?puts stdout ?$i > ? ?} > }') > > and I call it with: > >> tcl('test',letters[1:5]) ? ?# Works as expected > > Now say I define a tcl variable first: > >> a <- tclVar("") >> tclObj(a) <- as.tclObj(letters[1:5]) > >> tcl('set',a) ?# output list > > However > >> tcl('test',a) # does not work as expected, returns the variable name > > Why not? In fact, how do get the name of the "a" list in tcl (something > like RTcl...) so I could use it as follows >> .Tcl('test $RTcl1') #works > > Loops are much quicker in tcl than in R, hence I try to do some > computations in tcl and not via wrapper function in R. I therefore need > a way to easily access tcl variables from within R and tcl. >Try this: tcl("test", tclvalue(a))
Adrian Waddell wrote:> Dear R users, > > I have some troubles with dealing with tclObj objects. I try to explain > it with a toy example: > > Say I define the following tcl procedure which just prints out each list > element > > library(tcltk) > .Tcl('proc test {myList} { > foreach i $myList { > puts stdout $i > } > }') > > and I call it with: > >> tcl('test',letters[1:5]) # Works as expected > > Now say I define a tcl variable first: > >> a <- tclVar("") >> tclObj(a) <- as.tclObj(letters[1:5]) > >> tcl('set',a) # output list > > However > >> tcl('test',a) # does not work as expected, returns the variable name > > Why not? In fact, how do get the name of the "a" list in tcl (something > like RTcl...) so I could use it as follows >> .Tcl('test $RTcl1') #works > > Loops are much quicker in tcl than in R, hence I try to do some > computations in tcl and not via wrapper function in R. I therefore need > a way to easily access tcl variables from within R and tcl. > > Thanks for any help,Ow, that's been a while... However tcl('test', tclvalue(a)) seems to do the trick, as does tcl('test', tclObj(a)) The latter presumably being preferable, since it avoids conversion to and from an R object. If I remember these matters correctly, you are seeing the difference between "set RTcl1" and "test $RTcl1". -- Peter Dalgaard Center for Statistics, Copenhagen Business School Phone: (+45)38153501 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com