@BrodieG, , , , , .., c. , , , , , ( , S4 R, , , ).
setClass(Class = "Customers",
slots = c(CustomerId = "integer", Name = "character"))
setClass(Class = "Items",
slots = c(ItemId = "integer", Description = "character", Cost = "numeric"))
setClass(Class="Transactions",
slots = c(TransactionId="integer", CustomerId="integer", ItemId="integer"))
, -
Business = setClass(Class = "Business",
slots = c(Customers="Customers", Items="Items", Transactions="Transactions"))
,
.nextid <- function(x, slotName, n=1L)
max(0L, slot(x, slotName)) + seq_len(n)
.update <- function(x, ...) {
args <- list(...)
for (nm in names(args))
args[[nm]] <- c(slot(x, nm), args[[nm]])
do.call("initialize", c(list(x), args))
}
add_customers <- function(business, customerNames)
{
customers <- slot(business, "Customers")
len <- length(customerNames)
initialize(business,
Customers=.update(customers,
CustomerId=.nextid(customers, "CustomerId", len),
Name=customerNames))
}
add_items <- function(business, descriptions, costs)
{
items <- slot(business, "Items")
len <- length(descriptions)
initialize(business,
Items=.update(items,
ItemId=.nextid(items, "ItemId", len),
Description=descriptions, Cost=costs))
}
, , ; , , purchase() .
.purchase <- function(business, customerId, itemIds)
{
transactions <- slot(business, "Transactions")
len <- length(itemIds)
initialize(business,
Transactions=.update(transactions,
TransactionId=rep(.nextid(transactions, "TransactionId"), len),
CustomerId=rep(customerId, len),
ItemId=itemIds))
}
bus <- Business()
bus <- add_customers(bus, c("Fred", "Barney"))
bus <- add_items(bus, c("Phone", "Tablet"), c(200, 250))
bus <- .purchase(bus, 1L, 1:2)
bus <- .purchase(bus, 2L, 2L)
( )
> sum(bus@Items@Cost[bus@Transactions@ItemId])
[1] 700
R , , , ; , back-end SQL.