[R] [tcltk][tktable] How to make an efficient data transfer from R to Tcl?

Jim Lemon drjimlemon at gmail.com
Wed Dec 9 03:09:57 CET 2015


Hi Cleber,
have you tried:

edit(mtcars)

Jim


On Wed, Dec 9, 2015 at 1:04 PM, Cleber N.Borges <klebyn at yahoo.com.br> wrote:

> my objective is to show data in screen inside a tktable...
> for that, the data must be in a TCL variable and not only in a R variable
> like that:
>
> library( tcltk )
>> mtcars_in_TCL <- tclArray()
>> for( i in 1:5 ) for( j in 1:5 ) mtcars_in_TCL[[ i,j ]] <-
>>
> as.matrix(mtcars)[ i,j ]
>
> i thank by  attention
> cleber
>
>
> Em 08/12/2015 22:51, Bert Gunter escreveu:
>
>> Define: "transfer"
>>
>> (  save/load should be efficient and fast within R, but you appear to
>> have something else in mind. What?)
>>
>> Apologies if it's obvious and I just don't get it.
>>
>> Cheers,
>>
>> Bert
>>
>>
>> Bert Gunter
>>
>> "Data is not information. Information is not knowledge. And knowledge
>> is certainly not wisdom."
>>     -- Clifford Stoll
>>
>>
>> On Tue, Dec 8, 2015 at 4:37 PM, Cleber N.Borges <klebyn at yahoo.com.br>
>> wrote:
>>
>>> hello all,
>>> I intend transfer a big data.frame, more than 1e4 rows, more than 100
>>> columns...
>>> I found solutions (in internet and help pages) for small data.frame like
>>> the
>>> showed bellow.
>>> Big data.frames is very expensive in computation time in my approach
>>> I would like to optimize this transfer anyway ...
>>> I saw a function named "as.tclObj" that seems to me a promising form but
>>> hard to code...
>>> Somebody know a way more clever to do it?
>>>
>>> thanks for tips
>>> cleber
>>>
>>> ##########################################
>>> library( tcltk )
>>> nrow <- 10 ; ncol <- 100
>>> # simulated data: data is originally a data frame
>>> DF <- as.data.frame(matrix(round(runif(nrow*ncol),3),nr=nrow,nc=ncol))
>>> ######
>>> # DF_tcl <- as.tclObj( as.matrix( DF ) )
>>>
>>> tableDataTclArray <- tclArray()
>>> for( i in 1:nrow( DF ) )
>>>      tableDataTclArray[[ i, 0 ]] <- .Tcl( noquote( paste('format "',
>>> rownames( DF )[ i ] , '"') ) )
>>>
>>> for( i in 1:ncol( DF ) )
>>>      tableDataTclArray[[ 0, i ]] <- .Tcl( noquote( paste('format "',
>>> colnames( DF )[ i ] , '"') ) )
>>>
>>>
>>> for( i in 1:nrow( DF ) )
>>>      for( j in 1:ncol( DF ) )
>>>          tableDataTclArray[[ i, j ]] <- DF[i,j]
>>> ######
>>>
>>>
>>>
>>>
>>>
>>> ##############################################
>>> ##############################################
>>> ##############################################
>>> # my full code:
>>> ###############
>>> library( tcltk ); tclRequire("Tktable")
>>> wDataOrg <- tktoplevel()
>>> tcl('wm', 'geometry',  wDataOrg, "1024x600+175+80" )
>>> fmTableData <- ttklabelframe( wDataOrg, text='  Data  ', padding=c( 8,
>>> 5, 8,
>>> 15 ) )
>>> height <- -1; width <- -1
>>> nrowDefault <- 1e4+1; ncolDefault <- 100+1
>>> tableDataTclArray <- tclArray()
>>> tableData <- tkwidget( fmTableData, "table", rows=nrowDefault,
>>> cols=ncolDefault,
>>>                       height=height+1,width=width+1,
>>>                       xscrollcommand=function(...) tkset( scrX, ... ),
>>>                       yscrollcommand=function(...) tkset( scrY, ... ),
>>>                       rowstretchmode='unset', colstretchmode='unset',
>>> multiline=0, cache=1,
>>>                       background="white", selectmode="extended",
>>> selecttitle=0,
>>>                       font='{Arial} 10', ipadx=5, ipady=5, anchor='e',
>>>                       borderwidth=c( 0, 1, 0, 1 ), drawmode='slow',
>>>                       variable=tableDataTclArray )
>>> tcl( tableData, "tag", "celltag", "ZeroZero", "0,0" )
>>> tcl( tableData, "tag", "rowtag",  "rowtitle", "0" )
>>> tcl( tableData, "tag", "coltag",  "coltitle", "0" )
>>> tcl( tableData, "tag", "configure", "ZeroZero", bg='SystemButtonFace',
>>> relief="raised", state='disabled' )
>>> tcl( tableData, "tag", "configure", "rowtitle", bg='lightgreen',
>>> relief='raised', borderwidth=c( 0, 1, 0, 1 ), anchor='center' )
>>> tcl( tableData, "tag", "configure", "coltitle", bg='lightgreen',
>>> relief='raised', borderwidth=c( 0, 1, 0, 1 ), anchor='w' )
>>> tcl( tableData, "tag", "configure", "active", fg='yellow', bg='red' )
>>> tcl( tableData, "width", "0", "20" )
>>> scrX <- tkscrollbar( fmTableData, orient="horizontal",
>>> command=function(...)
>>> tkxview( tableData, ... ) )
>>> scrY <- tkscrollbar( fmTableData, orient="vertical",
>>> command=function(...)
>>> tkyview( tableData, ... ) )
>>> scrYwidth <- as.integer( tkcget( scrY, width = NULL ) )
>>> tcl( "pack", scrY, side = "right",  fill = "y", expand = FALSE, pady =
>>> c(0,
>>> scrYwidth + 2) )
>>> tcl( "pack", scrX, side = "bottom", fill = "x", expand = FALSE )
>>> tcl( "pack", tableData, anchor='n', side="right", expand=TRUE,
>>> fill="both"
>>> )
>>> tcl( "pack", fmTableData, fill="both", expand = TRUE, padx=10, pady=10 )
>>> ##########################################  expensive time computation
>>> [[elided Yahoo spam]]
>>> DF <- as.data.frame( matrix( round(runif(1e4 * 100),3), nr=1e4, nc=100 )
>>> )
>>> #### simulated data
>>> for( i in 1:nrow( DF ) ){
>>>      tableDataTclArray[[ i, 0 ]] <- .Tcl( noquote( paste('format "',
>>> rownames( DF )[ i ] , '"') ) )
>>>      }
>>> for( i in 1:ncol( DF ) ){
>>>      tableDataTclArray[[ 0, i ]] <- .Tcl( noquote( paste('format "',
>>> colnames( DF )[ i ] , '"') ) )
>>>      }
>>> for( i in 1:nrow( DF ) ) {
>>>      for( j in 1:ncol( DF ) ){
>>>          tableDataTclArray[[ i, j ]] <- DF[i,j]
>>>      }
>>> }
>>> #
>>>
>>>
>>>
>>>
>
> ---
> Este email foi escaneado pelo Avast antivírus.
> https://www.avast.com/antivirus
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list