Re: [Rd] S4 coerce

From: Paul Gilbert <pgilbert_at_bank-banque-canada.ca>
Date: Tue, 17 Jul 2007 10:22:48 -0400

Seth Falcon wrote:

>Paul Gilbert <pgilbert@bank-banque-canada.ca> writes:
>
>
>
>>(I am not sure if this is a bug or a request for a more understandable
>>warning, or possible something obvious I should be posting on r-help.)
>>
>>I am trying to coerce an new class object to be a DBIConnection and it
>>does not work the way I think it should:
>>
>>R version 2.5.1 (2007-06-27) ...
>> > require("RMySQL") # or require("RSQLite")
>>Loading required package: RMySQL
>>Loading required package: DBI
>>[1] TRUE
>> > m <- dbDriver("MySQL") # or m <- dbDriver("SQLite")
>> > con <- dbConnect(m, dbname="test")
>> > dbGetQuery(con, "create table zzz (
>>+ vintage VARCHAR(20) NOT NULL,
>>+ alias VARCHAR(20) default NULL,
>>+ Documentation TEXT,
>>+ PRIMARY KEY (vintage)
>>+ );")
>>NULL
>> > dbListTables(con)
>> [1] "zzz"
>> > setClass("TSconnection", representation(con="DBIConnection",
>>+ vintage = "logical",
>>+ panel = "logical")
>>+ )
>>[1] "TSconnection"
>> > setAs("TSconnection", "DBIConnection", def = function(from) from_at_con)
>>
>>
>
>I think things work as you expect up until this pint.
>
>
Yes.

>
>
>> > setIs("TSconnection", "DBIConnection", coerce = function(x)
>> > x_at_con)
>>
>>
>
>I'm confused about what you want to do here. If you want TSconnection
>to be a DBIConnection, why wouldn't you use inheritance?
>
> setClass("TSconnection", contains="DBIConnection", ...)
>
>
Perhaps my logic is confused, it wouldn't be the first time, but I am thinking of this as going the "other direction" from inheritance. A MySQLConnection or SQLiteConnection inherits from DBIConnection. To actually use a DBIConnection or my TSconnection it will be necessary to have one of these, so I would need something like

setClass("TSconnection", contains="MySQLConnection", ...)

to make this work. (Actually, I have not been able to make it work, but that may just be the novice level of my experimenting.) I am hoping I can define the TSconnection using only DBIConnection classes and have it automatically work when one of the database driver packages is added. Otherwise I have to define the TSconnection for each of the driver packages, which is not as clean.

Paul

>+ seth
>
>
>


La version franšaise suit le texte anglais.


This email may contain privileged and/or confidential inform...{{dropped}}



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 17 Jul 2007 - 14:52:46 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 18 Jul 2007 - 19:36:44 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.