The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
This guide covers the basic workflow:
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)
#> # A tibble: 1 × 25
#> income_mode purchase_year price horizon_years area_sqm price_per_sqm rent_sqm
#> <chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 entry_yield 2026 1e7 10 NA NA NA
#> # ℹ 18 more variables: vacancy_rate <dbl>, opex_sqm <dbl>,
#> # gross_potential_rent_y1 <dbl>, gei_y1 <dbl>, noi_y1 <dbl>, pbtcf_y1 <dbl>,
#> # entry_yield <dbl>, index_rate <dbl>, discount_rate <dbl>, debt_type <chr>,
#> # debt_ltv <dbl>, debt_rate <dbl>, irr_project <dbl>, irr_equity <dbl>,
#> # dscr_min <dbl>, ltv_max_forward <dbl>, ops_share <dbl>, tv_share <dbl>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
#> <cre_deal_spec>
#> price_di: 12000000.00
#> asset: 4,000.00 sqm | rent 240.00/sqm | vacancy 8.0% | opex 15.00/sqm | price 3,000.00/sqm
#> year-1: GEI 883,200.00 | NOI 823,200.00 | PBTCF 823,200.00 | entry yield 6.86%
#> horizon: 7 years
#> income mode: 4000.00 sqm x 240.00 rent/sqm
#> growth/discount: indexation 2.00% | discount rate 8.00%
#> debt: amort, LTV 55.0%, rate 4.30%res <- analyze_deal(deal)
res
#> <cre_deal_result>
#> # A tibble: 1 × 25
#> income_mode purchase_year price horizon_years area_sqm price_per_sqm rent_sqm
#> <chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 rent_roll 2026 1.20e7 7 4000 3000 240
#> # ℹ 18 more variables: vacancy_rate <dbl>, opex_sqm <dbl>,
#> # gross_potential_rent_y1 <dbl>, gei_y1 <dbl>, noi_y1 <dbl>, pbtcf_y1 <dbl>,
#> # entry_yield <dbl>, index_rate <dbl>, discount_rate <dbl>, debt_type <chr>,
#> # debt_ltv <dbl>, debt_rate <dbl>, irr_project <dbl>, irr_equity <dbl>,
#> # dscr_min <dbl>, ltv_max_forward <dbl>, ops_share <dbl>, tv_share <dbl>summary(res)
#> # A tibble: 1 × 25
#> income_mode purchase_year price horizon_years area_sqm price_per_sqm rent_sqm
#> <chr> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 rent_roll 2026 1.20e7 7 4000 3000 240
#> # ℹ 18 more variables: vacancy_rate <dbl>, opex_sqm <dbl>,
#> # gross_potential_rent_y1 <dbl>, gei_y1 <dbl>, noi_y1 <dbl>, pbtcf_y1 <dbl>,
#> # entry_yield <dbl>, index_rate <dbl>, discount_rate <dbl>, debt_type <chr>,
#> # debt_ltv <dbl>, debt_rate <dbl>, irr_project <dbl>, irr_equity <dbl>,
#> # dscr_min <dbl>, ltv_max_forward <dbl>, ops_share <dbl>, tv_share <dbl>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")
#> # A tibble: 3 × 9
#> scenario irr_equity npv_equity irr_project npv_project min_dscr
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 all_equity 0.100 1353712. 0.100 1353712. NA
#> 2 debt_bullet 0.161 2625108. 0.100 1353712. 3.11
#> 3 debt_amort 0.130 2165030. 0.100 1353712. 0.794
#> # ℹ 3 more variables: max_ltv_forward <dbl>, ops_share <dbl>, tv_share <dbl>
deal_cashflows(res, "full")
#> # A tibble: 8 × 36
#> year gei noi pbtcf net_operating_income capex opex free_cash_flow
#> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0 0 0 0 0 0 0 -12000000
#> 2 1 888000 883200 883200 888000 0 4800 883200
#> 3 2 905760 900864 900864 905760 0 4896 900864
#> 4 3 923875. 918881. 918881. 923875. 0 4994. 918881.
#> 5 4 942353. 937259. 937259. 942353. 0 5094. 937259.
#> 6 5 961200. 956004. 956004. 961200. 0 5196. 956004.
#> 7 6 980424. 975124. 975124. 980424. 0 5300. 975124.
#> 8 7 1000032. 994627. 994627. 1000032. 0 5406. 15561702.
#> # ℹ 28 more variables: sale_proceeds <dbl>, discount_factor <dbl>,
#> # discounted_cash_flow <dbl>, asset_value <dbl>, acquisition_price <dbl>,
#> # discounted_cf <dbl>, debt_draw <dbl>, interest <dbl>, amortization <dbl>,
#> # payment <dbl>, arrangement_fee <dbl>, outstanding_debt <dbl>,
#> # loan_init <dbl>, df <dbl>, cf_pre_debt <dbl>, cf_post_debt <dbl>,
#> # equity_flow <dbl>, equity_disc <dbl>, noi_fwd <dbl>, value_forward <dbl>,
#> # dscr <dbl>, interest_cover_ratio <dbl>, debt_yield_init <dbl>, …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)
#> <cre_deal_spec>
#> price_di: 10000000.00
#> asset: aggregated inputs (entry_yield)
#> year-1: GEI NA | NOI 550,000.00 | PBTCF 550,000.00 | entry yield 5.50%
#> horizon: 10 years
#> income mode: entry yield 5.50%
#> growth/discount: indexation 2.00% | discount rate 8.00%
#> debt: bullet, LTV 55.0%, rate 4.50%deal_spec(price = 10e6, noi_y1 = 550000)
#> <cre_deal_spec>
#> price_di: 10000000.00
#> asset: aggregated inputs (noi_y1)
#> year-1: GEI 550,000.00 | NOI 550,000.00 | PBTCF 550,000.00 | entry yield 5.50%
#> horizon: 10 years
#> income mode: NOI_y1 550000.00
#> growth/discount: indexation 2.00% | discount rate 8.00%
#> debt: bullet, LTV 55.0%, rate 4.50%deal_spec(
price = 10e6,
rent_sqm = 220,
area_sqm = 3000,
vacancy_rate = 0.05,
opex_sqm = 12
)
#> <cre_deal_spec>
#> price_di: 10000000.00
#> asset: 3,000.00 sqm | rent 220.00/sqm | vacancy 5.0% | opex 12.00/sqm | price 3,333.33/sqm
#> year-1: GEI 627,000.00 | NOI 591,000.00 | PBTCF 591,000.00 | entry yield 5.91%
#> horizon: 10 years
#> income mode: 3000.00 sqm x 220.00 rent/sqm
#> growth/discount: indexation 2.00% | discount rate 8.00%
#> debt: bullet, LTV 55.0%, rate 4.50%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().These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.