
182
|
第
6
章
注意输出的第三行重复地输出 <chr>。这是因为函数 class 的输出被放入
数据框,然后打印出来。数据框的中间部分的列是字符数据。最后一行告诉
我们原始数据框有三个因子列和一个数值型字段。
6.4.4 另请参见
参见 5.21 节、6.1 节和 6.3 节。
6.5 将函数应用于平行向量或列表
6.5.1 问题
你有一个带有多个参数的函数。你需要将函数应用于向量,并得到一个向量结果。不幸
的是,该函数没有向量化;也就是说,它适用于纯量,但不适用于向量。
6.5.2 解决方案
使用 tidyverse 中的核心添加包 purrr 中的 map 或 pmap 函数。最通用的解决方案是将
向量放在一个列表中,然后使用 pmap 函数:
lst <- list(v1, v2, v3)
pmap(lst, fun)
pmap 函数将获取 lst 的元素并将它们作为输入传递给 fun。
如果你只有两个向量作为输入传递给函数,则使用 map2 函数将非常方便,可以省去将
向量放在列表中的步骤。map2 函数将返回一个列表:
map2(v1, v2, fun)
而 map2 的其他类型变体(map2_chr、map2_dbl 等)将返回如其名称所示类型的向
量。因此,如果函数 fun 只返回一个双精度型结果,则使用 map2 的变体:
map2_dbl(v1, v2, fun)
purrr 的函数中的类型变体,指的是函数所期望的输出类型。所有的函数类型变体都返
回具有其相应类型的向量;而无类型变体的函数则返回列表,其中可以有混合类型的数据。 ...