From pdalgd at gmail.com  Thu Aug 12 21:04:07 2010
From: pdalgd at gmail.com (Peter Dalgaard)
Date: Thu, 12 Aug 2010 21:04:07 +0200
Subject: [Rd] accessing tcl variables within R and tcl
In-Reply-To: <4C643A0A.3060901@waddell.ch>
References: <4C643A0A.3060901@waddell.ch>
Message-ID: <4C6445A7.1010303@gmail.com>

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



[Rd] accessing tcl variables within R and tcl
Peter Dalgaard