
数据转换
|
179
df %>%
mutate(output = fun(a = mn, b = mx, c = rng))
#> Error in seq.default(a, b, c): 'from' must be of length 1
6.3 将函数应用于矩阵的每一行
6.3.1 问题
你有一个矩阵,希望将函数应用于每一行,计算每一行的函数结果。
6.3.2 解决方案
使用 apply 函数。将第二个参数设置为 1,它表明逐行应用一个函数:
results <- apply(mat, 1, fun) # mat is a matrix, fun is a function
apply 函数将为矩阵的每一行调用一次 fun,然后将返回值放到一个向量中,然后返回
该向量。
6.3.3 讨论
你可能会注意到我们在此仅显示基础的 R 的 apply 函数的使用,在其他方法中将说明
应用 purrr 的替代方法。在撰写本书时,矩阵运算不在添加包 purrr 的考虑范围内,
因此我们使用非常可靠的基础的 R 的 apply 函数。如果你真的喜欢 purrr 语法,那么
你首先要将矩阵转换为数据框或 tibble,这时可以使用这些函数。但是如果你的矩阵很
大,你会发现使用 purrr 时运行速度会大大降低。
假设我们有一个包含纵向数据 (longitudinal) 的名为 long 的矩阵,每行包含一个对象的
数据,而列包含的是重复观察记录:
long <- matrix(1:15, 3, 5)
long
#> [,1] ...