tests/testthat/test-set_variable.R

# Define a simple exdf object
test_exdf <- exdf(
    data.frame(species = c('maize', 'maize', 'soybean'), gsw = c(0.2, 0.3, 0.4)),
    units = data.frame(species = '', gsw = 'mol m^(-2) s^(-1)', stringsAsFactors = FALSE)
)

test_that('new columns can be added with set_variable', {
    # Set mesophyll conductance to infinity
    gmc_v1 <- set_variable(
        test_exdf,
        'gmc',
        'mol m^(-2) s^(-1) bar^(-1)',
        value = Inf
    )

    expect_equal(
        gmc_v1[, 'gmc'],
        c(Inf, Inf, Inf)
    )

    expect_equal(gmc_v1$units$gmc, 'mol m^(-2) s^(-1) bar^(-1)')

    expect_equal(gmc_v1$categories$gmc, 'NA')

    # Set mesophyll conductance based on species
    gmc_v2 <- set_variable(
        test_exdf,
        'gmc',
        'mol m^(-2) s^(-1) bar^(-1)',
        'testing',
        id_column = 'species',
        value_table = list(maize = 0.9, soybean = 1.1)
    )

    expect_equal(
        gmc_v2[, 'gmc'],
        c(0.9, 0.9, 1.1)
    )

    expect_equal(gmc_v2$units$gmc, 'mol m^(-2) s^(-1) bar^(-1)')

    expect_equal(gmc_v2$categories$gmc, 'testing')
})

test_that('new columns can be added to exdf and data frame objects', {
    gmc_exdf <- expect_silent(
        set_variable(
            test_exdf,
            'gmc',
            'mol m^(-2) s^(-1) bar^(-1)',
            'testing',
            value = 1.1,
            id_column = 'species',
            value_table = list(maize = 0.9)
        )
    )

    gmc_df <- expect_silent(
        set_variable(
            test_exdf$main_data,
            'gmc',
            'mol m^(-2) s^(-1) bar^(-1)',
            'testing',
            value = 1.1,
            id_column = 'species',
            value_table = list(maize = 0.9)
        )
    )

    expect_equal(
        gmc_exdf[, 'gmc'],
        c(0.9, 0.9, 1.1)
    )

    expect_equal(
        gmc_df[, 'gmc'],
        c(0.9, 0.9, 1.1)
    )
})

test_that('common mistakes are caught', {
    expect_error(
        set_variable(
            test_exdf,
            'gmc',
            'mol m^(-2) s^(-1) bar^(-1)',
            id_column = 'species',
            value_table = Inf
        ),
        'When a `value_table` is supplied, it must be a list'
    )

    expect_error(
        set_variable(
            test_exdf,
            'gmc',
            'mol m^(-2) s^(-1) bar^(-1)',
            id_column = 'species',
            value_table = list(0.9, soybean = 1.1)
        ),
        'When a `value_table` is supplied, all of its elements must have names'
    )

    expect_error(
        set_variable(
            test_exdf,
            'gmc',
            'mol m^(-2) s^(-1) bar^(-1)',
            id_column = 'species',
            value_table = list(0.9, 1.1)
        ),
        'When a `value_table` is supplied, all of its elements must have names'
    )

    expect_error(
        set_variable(
            test_exdf,
            'gmc',
            'mol m^(-2) s^(-1) bar^(-1)',
            value_table = list(maize = 0.9, soybean = 1.1)
        ),
        'When a `value_table` is supplied, an `id_column` must also be supplied'
    )

})

Try the PhotoGEA package in your browser

Any scripts or data that you put into this service are public.

PhotoGEA documentation built on April 11, 2025, 5:48 p.m.