Nothing
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
This guide covers the basic workflow:
deal_spec() -> analyze_deal() -> summary() -> deal_cashflows()
deal_spec(): define the dealdebt_terms(): define the debtanalyze_deal(): run the modelsummary(): read key metricsdeal_cashflows(): extract tables| Variable | Meaning |
|:--|:--|
| price | all-in acquisition price |
| horizon_years | holding period |
| entry_yield | entry cap rate |
| noi_y1 | year-1 NOI if already known |
| rent_sqm | rent per sqm |
| area_sqm | lettable area |
| vacancy_rate | average vacancy |
| discount_rate | discount rate |
| ltv | initial leverage |
| rate | debt interest rate |
Use exactly one income mode:
entry_yieldnoi_y1rent_sqm + area_sqmlibrary(cre.dcf) deal <- deal_spec( price = 10e6, entry_yield = 0.055, horizon_years = 10, debt = debt_terms( ltv = 0.60, rate = 0.045, type = "bullet" ) ) res <- analyze_deal(deal) summary(res)
deal <- deal_spec( price = 12e6, rent_sqm = 240, area_sqm = 4000, vacancy_rate = 0.08, opex_sqm = 15, horizon_years = 7, discount_rate = 0.08, debt = debt_terms( ltv = 0.55, rate = 0.043, type = "amort", maturity = 7 ) ) deal
res <- analyze_deal(deal) res
summary(res)
Key fields:
irr_project: project return before leverageirr_equity: return to equitydscr_min: minimum debt-service coverage ratioltv_max_forward: maximum forward LTVops_share: share of present value coming from operating cash flowstv_share: share of present value coming from terminal valuedeal_cashflows(res, "comparison") deal_cashflows(res, "full")
Use:
"full" for the merged operating and debt cash flows"all_equity" for the unlevered table"leveraged" for the equity cash-flow view"comparison" for the summary by financing structuredeal_spec(price = 10e6, entry_yield = 0.055)
deal_spec(price = 10e6, noi_y1 = 550000)
deal_spec( price = 10e6, rent_sqm = 220, area_sqm = 3000, vacancy_rate = 0.05, opex_sqm = 12 )
price is always the all-in acquisition price in the simplified API.rent_sqm + area_sqm, the package derives year-1 NOI for you.debt_terms() defaults and only change ltv, rate, and type.Use the advanced API only if you need:
run_case().Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.