to_list {comprehenr} | R Documentation |
List comprehensions for R
Description
-
to_list
converts usual R loops expressions to list producers. Expression should be started withfor
,while
orrepeat
. You can iterate over multiple lists if you provide several loop variables in backticks. See examples. -
to_vec
is the same as 'to_list' but return vector. See examples. -
to_df
is the same as 'to_list' but return data.frame. All elements of resulted list will be converted to data.frame and combined viarbind
. -
alter
returns the same type as its argument but with modified elements. It is useful for altering existing data.frames or lists. See examples. -
exclude
is an auxiliary function for dropping elements inalter
. There are no arguments for this function.
Usage
to_list(expr)
to_vec(expr, recursive = TRUE, use.names = FALSE)
alter(expr, data = NULL)
to_df(expr, fill = TRUE)
exclude()
Arguments
expr |
expression which starts with |
recursive |
logical. Should unlisting be applied to list components of result? See unlist for details. |
use.names |
logical. Should names be preserved? See unlist for details. |
data |
data.frame/list/vector which we want to alter |
fill |
logical. TRUE by default. Should we combine data.frames with different names in the |
Value
list for to_list
and vector for to_vec
Examples
# rather useless expression - squares of even numbers
to_list(for(i in 1:10) if(i %% 2==0) i*i)
# Pythagorean triples
to_list(for (x in 1:30) for (y in x:30) for (z in y:30) if (x^2 + y^2 == z^2) c(x, y, z))
colours = c("red", "green", "yellow", "blue")
things = c("house", "car", "tree")
to_vec(for(x in colours) for(y in things) paste(x, y))
# prime numbers
noprimes = to_vec(for (i in 2:7) for (j in seq(i*2, 99, i)) j)
primes = to_vec(for (x in 2:99) if(!x %in% noprimes) x)
primes
# iteration over multiple lists
to_vec(for(`i, j` in numerate(letters)) if(i %% 2==0) paste(i, j))
set.seed(123)
rand_sequence = runif(20)
# gives only locally increasing values
to_vec(for(`i, j` in lag_list(rand_sequence)) if(j>i) j)
# to_df
to_df(for(`name, x` in mark(mtcars)) list(mean = mean(x), sd = sd(x), var = name))
# 'alter' examples
data(iris)
# scale numeric variables
res = alter(for(i in iris) if(is.numeric(i)) scale(i))
str(res)
# convert factors to characters
res = alter(for(i in iris) if(is.factor(i)) as.character(i))
str(res)
# exclude factors from data.frame
res = alter(for(i in iris) if(is.factor(i)) exclude())
str(res)
# 'data' argument example
# specify which columns to map with a numeric vector of positions:
res = alter(
for(`i, value` in numerate(mtcars)) if(i %in% c(1, 4, 5)) as.character(value),
data = mtcars
)
str(res)
# or with a vector of names:
res = alter(
for(`name, value` in mark(mtcars)) if(name %in% c("cyl", "am")) as.character(value),
data = mtcars
)
str(res)