tests/testthat/test_labels.R

context("var_lab")

data(mtcars)

expect_identical(var_lab(mtcars$am), NULL)
expect_identical(var_lab(mtcars), NULL)

expect_identical(var_lab(mtcars$am, default = "My default label"), "My default label")
expect_identical(var_lab(mtcars, default = "My default label"), "My default label")

var_lab(mtcars$am) = "My am"

expect_identical(var_lab(mtcars$am, default = "My default label"), "My am")
expect_identical(var_lab(mtcars, default = "My default label"), "My am")

test_ds = data.frame(total = 1, s2b = sample(2:3,100,replace = TRUE))
age_group = test_ds$s2b
var_lab(test_ds$s2b) = "Age group"
age_group = set_var_lab(age_group,"Age group")
expect_identical(age_group,test_ds$s2b) # should be TRUE

expect_identical(var_lab(age_group),attr(age_group,"label")) # should be TRUE


test_ds = unvr(test_ds)
test_test_ds = test_ds

for (each in seq_along(test_test_ds)) var_lab(test_test_ds[[each]]) = "Age group"

expect_identical(set_var_lab(test_ds, "Age group"), test_test_ds)


test_ds = as.list(unvr(test_ds))
test_test_ds = test_ds

for (each in seq_along(test_test_ds)) var_lab(test_test_ds[[each]]) = "Age group"

expect_identical(set_var_lab(test_ds, "Age group"), test_test_ds)
expect_identical(test_ds, unvr(test_test_ds))
expect_identical(test_ds, drop_var_labs(test_test_ds))

context("val_lab")

a = 1
expect_error({val_lab(a) = c(a = 1, b = 1)})
val_lab(a) = c(a = 1, a = 2)
b = set_val_lab(1, c(a = 1, "a|" = 2))
expect_identical(a, b)



## data.frame

dd = data.frame(a=1:3,b=3:1,d=3)

val_lab(dd$a) = c(a=1)
val_lab(dd$b) = c(b=2)
val_lab(dd$d) = c(d=3)

expect_identical(c(a=1,b=2,d=3),val_lab(dd))

dd = data.frame(a=1:3,b=3:1,d=3)

val_lab(dd$a) = c(a=1)
val_lab(dd$b) = c(b=2)
val_lab(dd$d) = c(d=1)

expect_identical(c(a=1,b=2),val_lab(dd))

### Add labels ###

expect_identical(drop_all_labels(test_ds), unlab(test_ds))
expect_identical(drop_val_labs(test_ds), unvl(test_ds))
test_ds = unlab(test_ds) # drop all labels

age_groups = c('18 - 26' = 2, '27 - 35' = 3)
add_val_lab(test_ds$s2b) = age_groups[1]
add_val_lab(test_ds$s2b) = age_groups[2]

expect_identical(test_ds$s2b, set_val_lab(unlab(test_ds$s2b),age_groups))

test_ds$s2b = unlab(test_ds$s2b)

## make labels from text copied from questionnaire

val_lab(test_ds$s2b) = make_labels("
 2. 18 - 26
 3. 27 - 35
")

expect_equal(test_ds$s2b, set_val_lab(test_ds$s2b,age_groups))

context("make_labels")

labs1 = c('18 - 26' = 2, '27 - 35' = 3)

labs2 = c(Brand1 =1 , Brand2 =2 ,Brand3=3, Brand4=4)
labs2_1 = c("Brand 1" =1 , "Brand 2" =2 ,"Brand 3"=3, "Brand 4"=4)

labs3 = c(Bad = -1 , Normal= 0, Good=1)
labs4 = c('Very bad' = -1 ,'Bad' = -0.5 ,Normal= 0,Good = 0.5 ,'Very good'=1)
    
expect_identical(labs1,make_labels("
 2. 18 - 26
 3. 27 - 35
"))

expect_identical(labs2,make_labels("
    1\tBrand1

\t\t2.    Brand2    

3.\t\t    Brand3\t\t


4    Brand4

"))

expect_identical(labs2,num_lab("
    1\tBrand1

\t\t2.    Brand2    

3.\t\t    Brand3\t\t


4    Brand4

"))



expect_identical(labs2,lab_num("
    Brand1\t      1

\t\t    Brand2   2 

\t\t    Brand3\t\t3


Brand4              4

"))



expect_identical(labs2_1,make_labels("
    1\tBrand 1

\t\t2.    Brand 2    

3.\t\t    Brand 3\t\t


4    Brand 4

"))

expect_identical(labs2_1,make_labels("
    Brand 1\t      1

\t\t    Brand 2   2 

\t\t    Brand 3\t\t3


Brand 4              4

",code_position="right"))


expect_identical(labs3,make_labels(
    "Bad  -1 
    \t\tNormal\t\t 0 
    Good    1
    
    
    
    ",code_position="right"))


expect_identical(labs3,make_labels(
    "   -1. \t   Bad 
    0\t\tNormal\t\t  
    1 Good
    
    
    
    ",code_position="left"))


expect_identical(labs4,make_labels("
    Very bad -1
    Bad \t -0.5 
    Normal    0 
    \t\tGood 0.5 
    Very good  1
    
    
    ",code_position="right"))



expect_identical(labs4,make_labels("
      \t-1 Very bad
       \t-0.5\tBad \t  
    0 Normal
     0.5\t\tGood 
    1 Very good
    
    
    ",code_position="left"))


expect_identical(labs4,make_labels(c("
                            \t-1 Very bad",
                            "\t-0.5\tBad \t",  
                            "0 Normal
                            0.5\t\tGood", 
                            "1 Very good
                            
                            
                            ","","      \t\t"),code_position="left"))


expect_identical(make_labels("
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
"), NULL)

expect_identical(make_labels("
    1  hi
                             2
                             3
                             4
                             5
                             6
                             7
                             8
                             9
                             10 lo
                             "), c(hi=1, lo = 10))

expect_error(make_labels("
    1
                         2
                         3
                         wdwddde
                         5
                         6
                         7
                         8
                         9
                         10
                         "))

context("add_val_lab")
vec = 1:5
dfs = data.frame(a = vec, b = vec)

dfs1 = set_val_lab(dfs, c(a=1, b=2, c=3, d=4, e=5))

add_val_lab(dfs) = c(a=1)
add_val_lab(dfs) = c(b=2)
add_val_lab(dfs) = c(c=3)
add_val_lab(dfs) = c(d=4)
add_val_lab(dfs) = c(e=5)

expect_identical(dfs, dfs1)


context("labels NULL")
a = 1:3
b = a
val_lab(b) = c(a=1)
# expect_identical(set_val_lab(b, NULL), as.double(a))
# a = as.double(a)
var_lab(b) = "bbb"
expect_identical(set_val_lab(b, NULL), set_var_lab(a, "bbb"))
expect_identical(set_var_lab(b, NULL), set_val_lab(a, c(a=1)))
expect_identical(set_val_lab(set_var_lab(b, NULL), NULL), a)
val_lab(b) = NULL
expect_identical(b, set_var_lab(a, "bbb"))
var_lab(b) = NULL
expect_identical(b, a)

context("make_labels autonum")

expect_identical(
 make_labels(
"
male


female
             ", code_position = "autonum"),
c(male = 1L, female = 2L)
)

expect_identical(
    make_labels(
        "male
        female      ", code_position = "autonum"),
    c(male = 1L, female = 2L)
    )

expect_identical(
    make_labels(
        "

        female      ", code_position = "autonum"),
    c(female = 1L)
    )

expect_identical(
    make_labels(
        "
        
              ", code_position = "autonum"),
    NULL
    )

expect_identical(
    autonum(
        "
        male
        
        
        female
        "),
    c(male = 1L, female = 2L)
    )



context("as.labelled")



character_vector = c("one", "two",  "two", "three")
res = c(1L, 3L, 3L, 2L)

expect_error(set_val_lab(res, character_vector))

val_lab(res) = c("one" = 1L, "three" = 2L, "two" = 3L)
var_lab(res) = "Numbers"
expect_identical(
    as.labelled(character_vector, label = "Numbers"),
    res
)


val_lab(character_vector) = c("uno" = "one", "duo" = "two")

var_lab(character_vector) = "Chars"

expect_equal(as.labelled(character_vector), 
structure(c(1L, 3L, 3L, 2L), labels = structure(1:3, .Names = c("uno", 
"three", "duo")), class = c("labelled", "integer"), label = "Chars"))

expect_equal(as.labelled(character_vector, label = "Numbers"), 
structure(c(1L, 3L, 3L, 2L), labels = structure(1:3, .Names = c("uno", 
"three", "duo")), class = c("labelled", "integer"), label = "Numbers"))

val_lab(character_vector) = c("uno" = "one", "duo" = "two", "other" = "some other value" )
expect_equal(
as.labelled(character_vector),
structure(c(1L, 4L, 4L, 3L), labels = structure(1:4, .Names = c("uno", 
"other", "three", "duo")), class = c("labelled", "integer"), label = "Chars")
)

vec = set_val_lab(c(1, 2, 3, NA), c(One = 1, Four = 4))
var_lab(vec) = "My vec"
expect_equal(as.labelled(vec),
structure(c(1, 2, 3, NA), labels = c(One = 1, `2` = 2, `3` = 3, 
Four = 4), class = c("labelled", "numeric"), label = "My vec"))

expect_equal(as.labelled(vec, label = "Other vec"),
structure(c(1, 2, 3, NA), labels = c(One = 1, `2` = 2, `3` = 3, 
Four = 4), class = c("labelled", "numeric"), label = "Other vec"))

data(iris)
species = rep(1:3, each = 50) * 1.0
val_lab(species) = c("setosa" = 1L, "versicolor" = 2L, "virginica" = 3L) 

expect_identical(as.labelled(iris$Species), species)


dat = as.POSIXct(c("2016-09-25", "2016-09-26"))

res = 1:2
val_lab(res) = setNames(1:2, as.character(dat))
expect_identical(as.labelled(dat), res)

a = 1:2
val_lab(a) = c("a"=1, "b" = 2)
expect_identical(as.labelled(a), a)
var_lab(a) = "ssdds"
expect_identical(as.labelled(a), a)
expect_identical(as.labelled(a, "new"), set_var_lab(a, "new"))
a = 1:2
var_lab(a) = "ssdds"
expect_equal(as.labelled(a), set_val_lab(a, c("1" = 1L, "2" = 2L)))

context("as.labelled labelled factor")
a = factor(c("a", "b", "c"), levels = rev(c("a", "b", "c", "d", "e")))
b = as.double(5:3)
val_lab(b) = setNames(5:1, letters[1:5])
expect_identical(as.labelled(a), b)

var_lab(a) = "My 'a' with labels"
var_lab(b) = "My 'a' with labels"
expect_identical(as.labelled(a), b)
var_lab(b) = "New label"
expect_identical(as.labelled(a, "New label"), b)

context("as.labelled labelled character")

a = letters
a_res = set_val_lab(1:26, setNames(1:26, letters))
expect_identical(as.labelled(a), a_res)

var_lab(a) = "Letters"
var_lab(a_res) = "Letters"
expect_identical(as.labelled(a), a_res)



context("is.labelled")

a = 1:5
expect_identical(is.labelled(a), FALSE)
var_lab(a) = "aaa"
expect_identical(is.labelled(a), TRUE)
a = unlab(a)
expect_identical(is.labelled(a), FALSE)
val_lab(a) = c(a = 1)
expect_identical(is.labelled(a), TRUE)
class(a) = union("new_class", class(a))
expect_identical(is.labelled(a), TRUE)



aaa = matrix(1:9, 3)

expect_error(as.labelled(as.list(aaa), NULL))
expect_error(as.labelled(as.data.frame(aaa), NULL))

#### with strange lists ####
context("labels on lists")

data(mtcars)
mtcars = apply_labels(mtcars,
                      mpg = "Miles/(US) gallon",
                      cyl = "Number of cylinders",
                      disp = "Displacement (cu.in.)",
                      hp = "Gross horsepower",
                      drat = "Rear axle ratio",
                      wt = "Weight (lb/1000)",
                      qsec = "1/4 mile time",
                      vs = "Engine",
                      vs = c("V-engine" = 0,
                             "Straight engine" = 1),
                      am = "Transmission",
                      am = c("Automatic" = 0,
                             "Manual"=1),
                      gear = "Number of forward gears",
                      carb = "Number of carburetors"
)

model = use_labels(mtcars, lm(mpg ~ vs + am + hp + wt))

expect_equal(coef(model), 
 c("(Intercept)" = 31.078787633184, Engine = 1.78554615438006, 
                Transmission = 2.4171417451949, "`Gross horsepower`" = -0.0301008065670308, 
                "`Weight (lb/1000)`" = -2.59099878666853))
expect_equal(deparse(formula(model), width.cutoff = 500), 
                          "`Miles/(US) gallon` ~ Engine + Transmission + `Gross horsepower` + `Weight (lb/1000)`")


context("value labels on factor")

gender = c(1, 1, 1, 0, 0, 0, 1, 0, 0, 0,
                     1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,
                     0, 0, 1, 0, 1, 1, 1, 1, 1, 0)
group = c(rep(1, 10), rep(2, 11), rep(3, 10))
sample.df = data.frame(group = factor(group), gender = factor(gender))

sample.df = apply_labels(sample.df,
                         gender = "Gender",
                         group = "Group")
expect_warning({
val_lab(sample.df$group) = num_lab("1 A
                               2 B
                               3 C")
val_lab(sample.df$gender) = num_lab("0 Women
                                1 Men")
})

res = cro_cases(sample.df$group, sample.df$gender)


var_lab(gender) = "Gender"
var_lab(group) = "Group"

val_lab(group) = num_lab("1 A
                                   2 B
                                   3 C")
val_lab(gender) = num_lab("0 Women
                                    1 Men")

test = cro_cases(group, gender)

expect_identical(res, test)


context("add_labelled_class")

a = 1:3
attr(a, "label") = "My label"

aa = 1:3
var_lab(aa) = "My label"
expect_identical(add_labelled_class(a), aa)

df = sheet(a, b = 5:7, d = set_val_lab(5:7, c("hs" = 99)))
fixed_df = sheet(a = aa, b = 5:7, d = set_val_lab(5:7, c("hs" = 99)))
expect_identical(add_labelled_class(df), fixed_df)


df = as.list(df)
fixed_df = as.list(fixed_df)
expect_identical(add_labelled_class(df), fixed_df)

class(df$b) =  c("spss_labelled", "haven_labelled")
expect_identical(add_labelled_class(df), fixed_df)

class(fixed_df$b) =  c("spss_labelled", "haven_labelled")
expect_identical(add_labelled_class(df, remove_classes = NULL), fixed_df)
gdemin/labelr documentation built on April 13, 2024, 2:34 p.m.