schedule_compact()
takes a parent Idf
object, a name for
Schedule:Compact
object, and returns a corresponding IdfScheduleCompact
object.
IdfScheduleCompact
is an abstraction of a single Schedule:Compact
object
in an Idf. It provides more detailed methods to add, modify and extract
schedule values.
schedule_compact(parent, name, new = FALSE)
An Idf object.
A valid name (a string) for a Schedule:Compact
object.
If TRUE
, a new empty IdfScheduleCompact is created. Default:
FALSE
.
An IdfScheduleCompact object.
If new
is TRUE
, an empty IdfScheduleCompact is created,
with all field values being empty. The empty IdfScheduleCompact is directly
added into the parent Idf object. It is recommended to use $validate()
method in IdfScheduleCompact to see what kinds of further modifications are
needed for those empty fields and use $set()
and $update()
method to set
field values.
Idf class
eplusr::IdfObject
-> eplusr::IdfSchedule
-> IdfScheduleCompact
Inherited methods
eplusr::IdfObject$class_name()
eplusr::IdfObject$comment()
eplusr::IdfObject$definition()
eplusr::IdfObject$group_name()
eplusr::IdfObject$has_ref()
eplusr::IdfObject$has_ref_by()
eplusr::IdfObject$has_ref_node()
eplusr::IdfObject$has_ref_to()
eplusr::IdfObject$id()
eplusr::IdfObject$name()
eplusr::IdfObject$parent()
eplusr::IdfObject$print()
eplusr::IdfObject$ref_by_object()
eplusr::IdfObject$ref_to_node()
eplusr::IdfObject$ref_to_object()
eplusr::IdfObject$to_string()
eplusr::IdfObject$to_table()
eplusr::IdfObject$value()
eplusr::IdfObject$value_possible()
eplusr::IdfObject$value_relation()
eplusr::IdfObject$version()
new()
Create an IdfScheduleCompact
object
IdfScheduleCompact$new(object, parent, new = FALSE)
object
An integer specifying an object ID.
parent
An Idf object specifying the parent object.
new
If TRUE
, an empty IdfScheduleCompact
will be created.
Default: FALSE
type_limits()
Get or set the schedule type limits
name
A string specifying the name of an ScheduleTypeLimits
object in current Idf. If missing, value of last time will
be used.
set()
Set schedule values
...
Schedule day types and value specifications in lists.
Group day types inside c(...)
at the LHS of :=
Put actual schedule values inside list(...)
at the RHS of :=
Each schedule value should be named a time. Time can be given in
either ..H
or "HH:MM"
.
.check_range
If TRUE
, schedule values will be checked based
on $type_limits()
. Default: TRUE
.
update()
Update schedule values using data.frame
data
A data.frame of at least 4 columns:
year_day
: Used for the Through:
fields. Can be in one of the
following formats:
character
: Day specifications in either mm/dd
or mm-dd
where mm
is the month in 1:12
or in character and dd
is the
day in month in 1:31
Date
: The year component will be ignored and only the month and
day component will be used
integer
: Julian day, e.g. 360
, 365
and etc
id
(Optional): Integer type. Used to group together different day
types with same schedule values. Grouped day types will be
compacted in a single For:
field, e.g. For: Weekdays SummaryDesignDay
. Grouped day types should have the same schedule
values. Otherwise an error will be issued.
daytype
: Character type. Used for the For:
fields. All possible
values are listed below. Case-insensitive matching is used.
Different day types can be grouped using the id
column mentioned
above or put together directly in a single string separate by comma
(,
), e.g. "weekend, holiday"
"AllDay(s)"
"Weekday(s)"
, and also "Monday"
, "Tuesday"
, "Wednesday"
,
"Thursday"
and "Friday"
"Weekend(s)"
, and also "Saturday"
and "Sunday"
"SummaryDesignDay"
and "WinterDesignDay"
"Holiday"
"CustomDay1"
and "CustomDay2"
"AllOtherDay(s)"
time
: Used for the Until:
fields. Can be in one of the
following formats:
character
: Time specifications in HH:MM
where HH
is the hour in 0:24
and MM
is the
minute in 0:60
integer
: Time differences from 00:00:00
in minutes, e.g.
seq(60, 60 * 24, by = 60)
hms
: hms
objects constructed using hms::hms()
or
equivalents, e.g. hms::hms(minutes = 30, hours = 1)
, and
hms::as_hms("1:30:00")
difftime
: difftime
objects constructed using as.difftime()
or equivalents, e.g. as.difftime(1:24, units = "hours")
ITime
: ITime
objects constructed using
data.table::as.ITime()
, e.g. as.ITime("01:30:00")
value
: Numeric type. Used for the actual schedule values
check_range
If TRUE
, schedule values will be checked based
on $type_limits()
. Default: TRUE
.
compact
If TRUE
, same schedule values from different day
types will be compacted together. Also, time periods that
have the same schedule values will also be compacted.
Note that only "Holiday"
, "CustomDay1"
and "CustomDay2"
will be compacted into "AllOtherDays"
. For example, if the
daytype
column contains only "Weekdays"
,
"SummerDesignDay"
and "AllOtherDays"
, "AllOtherDays"
will be expanded to "Weekends"
, "WinterDesignDay"
and
"AllOtherDays"
. Default: FALSE
.
\dontrun{
sch$update(sch$extract())
val1 <- data.table::data.table(
year_day = "12/31",
daytype = "weekday,summerdesignday",
time = c("6:00", "8:00", "12:00", "13:30", "14:00", "18:00", "19:00", "24:00"),
value = c(0.2, 0.5, 0.95, 0.6, 0.8, 0.95, 0.2, 0.0)
)
val2 <- data.table::data.table(
year_day = "12/31", daytype = "allotherday",
time = "24:00", value = 0.0
)
val <- data.table::rbindlist(list(val1, val2))
sch$update(val)
}
validate()
Check possible object field value errors
IdfScheduleCompact$validate(level = eplusr_option("validate_level"))
level
One of "none"
, "draft"
, "final"
or a list of 10
elements with same format as custom_validate()
output.
$validate()
checks if there are errors in current
IdfScheduleCompact
object under specified validation level and
returns an IdfValidity
object.
Schedule value ranges will be checked if current validate level
contains range checking (if corresponding ScheduleTypeLimits
Numeric Type
is Continuous
) or choice checking (if corresponding
ScheduleTypeLimits
Numeric Type
is Discrete
).
For detailed description on validate checking, see
IdfObject$validate()
documentation above.
is_valid()
Check if there is any error in current object
IdfScheduleCompact$is_valid(level = eplusr_option("validate_level"))
level
One of "none"
, "draft"
, "final"
or a list of 10
elements with same format as custom_validate()
output.
$is_valid()
returns TRUE
if there is no error in current
IdfScheduleCompact
object under specified validation level.
Schedule value ranges will be checked if current validate level
contains range checking (if corresponding ScheduleTypeLimits
Numeric Type
is Continuous
) or choice checking (if corresponding
ScheduleTypeLimits
Numeric Type
is Discrete
).
$is_valid()
checks if there are errors in current IdfObject
object
under specified validation level and returns TRUE
or FALSE
accordingly. For detailed description on validate checking, see
IdfObject$validate()
documentation above.
extract()
Extract schedule values
daytype
Should be one of:
NULL
: Do nothing Grouped day types will be concatenated with a
comma, e.g. Weekdays,SummerDesignDay
. This is the default
behavior.
TRUE
or "expand"
: All compacted day types will be expanded.
FALSE
or "compact"
: Same schedule values from different day
types will be compacted together.
A character vector specifying the grouped day types, e.g.
c("weekday", "summerdesignday")
. All other days except specified
ones will be classified into day type AllOtherDays
, if possible.
If not possible, those day types will still be extracted
separately.
timestep
The time step of schedule values, e.g. "10 mins" and
"1 hour". Valid units include sec(s)
, min(s)
, and
hour(s)
. If NULL
, the original time specifications will be
kept. If "auto"
, the time periods with the same schedule
values will be compacted. Default: NULL
.
NULL
if current schedule is empty. Otherwise, a
data.table::data.table()
of 5 columns:
year_day
: Character type. Used for the Through:
fields.
Day specifications in mm/dd
format
id
: Integer type. The group index of day types
daytype
: Character type. Used for the For:
fields. All possible
values are:
"AllDay"
"Weekday"
, and also "Monday"
, "Tuesday"
, "Wednesday"
,
"Thursday"
and "Friday"
"Weekend"
, and also "Saturday"
and "Sunday"
"SummaryDesignDay"
and "WinterDesignDay"
"Holiday"
"CustomDay1"
and "CustomDay2"
"AllOtherDay"
time
: hms
vector. Used for the Until:
fields. It is handy for
plotting since hms
object is directly supported by the scale
system of ggplot2
package
value
: Numeric type. Actual schedule values
## ------------------------------------------------
## Method `IdfScheduleCompact$new`
## ------------------------------------------------
if (FALSE) { # \dontrun{
model <- read_idf(system.file("extdata/1ZoneUncontrolled.idf", package = "eplusr"))
# create an empty 'Schedule:Compact'
schedule_compact(model, "sch", TRUE)
# get an existing 'Schedule:Compact'
sch <- schedule_compact(model, "sch")
} # }
## ------------------------------------------------
## Method `IdfScheduleCompact$set`
## ------------------------------------------------
if (FALSE) { # \dontrun{
sch$set(c("weekday", "summerdesignday") := list(
..6 = 0.2, "8:00" = 0.5,
..12 = 0.95, "13:30" = 0.6, ..14 = 0.8,
..18 = 0.95, ..19 = 0.2, ..24 = 0),
allotherday = list(..24 = 0)
)
} # }
## ------------------------------------------------
## Method `IdfScheduleCompact$update`
## ------------------------------------------------
if (FALSE) { # \dontrun{
sch$update(sch$extract())
val1 <- data.table::data.table(
year_day = "12/31",
daytype = "weekday,summerdesignday",
time = c("6:00", "8:00", "12:00", "13:30", "14:00", "18:00", "19:00", "24:00"),
value = c(0.2, 0.5, 0.95, 0.6, 0.8, 0.95, 0.2, 0.0)
)
val2 <- data.table::data.table(
year_day = "12/31", daytype = "allotherday",
time = "24:00", value = 0.0
)
val <- data.table::rbindlist(list(val1, val2))
sch$update(val)
} # }
## ------------------------------------------------
## Method `IdfScheduleCompact$validate`
## ------------------------------------------------
if (FALSE) { # \dontrun{
sch$validate()
# check at predefined validate level
sch$validate("none")
sch$validate("draft")
sch$validate("final")
} # }
## ------------------------------------------------
## Method `IdfScheduleCompact$is_valid`
## ------------------------------------------------
if (FALSE) { # \dontrun{
sch$is_valid()
} # }
## ------------------------------------------------
## Method `IdfScheduleCompact$extract`
## ------------------------------------------------
if (FALSE) { # \dontrun{
sch$extract()
sch$extract("expand")
sch$extract(timestep = "30 mins")
} # }