我一直在试图理解何时需要使用Apply或Map函数以及在其中使用公式的方法,但没有取得太大的成功,因为我看不到所谓的调用背后的逻辑。这是一个使用mutate的简单示例:
library(tidyverse)
df <- tibble(
a = 1:5,
b = 3:7,
c = 5:9
)
df %>%
mutate(new = a)
new的每个元素都是a的对应元素。
df %>%
mutate(new = 1 == a)
new的每个元素都是TRUE,则为false,具体取决于a的相应元素。
df %>%
mutate(new = 3 %in% a)
new的每个元素都是相同的,它检查3是否在整个向量a中,而不仅仅是对应的元素。
那么它何时使用带有匹配行的变量中的元素,何时使用整个变量向量?我看不到可以帮助我确定是否需要使用Apply或Map的逻辑模式。
df %>%
mutate(new = str_c(a, b, sep = "..."))
我想也许与功能有关,但是在这里它使用a和b的对应元素,而不是整个向量。
类似地,如果我的标题中有列表向量:
df2 <- tibble(
prb = c(0.2, 0.5, 0.3),
dist = list(rnorm(5, sd = 1),
rnorm(5, sd = 5),
rnorm(5, sd = 10))
)
df2 %>%
mutate(new = prb * dist)
这会产生错误,即使0.2 * rnorm(5,sd = 1)不会。
df2 %>%
mutate(one = map2(prb, dist, ~.x * .y))
所以我必须使用类似这样的东西。为什么?
df2 %>%
mutate(new = dist)
这会复制dist列,因此它必须查看dist的每个元素?
df2 %>%
mutate(new = dist[1])
但这不能按我的意愿工作,因为它返回整个dist列表的第一个元素(它是5个值的向量)。我想要与每一行相对应的向量的第一个元素,因此它返回一个数字。是的,我知道我可以使用map函数和公式来做到这一点,但是为什么起作用或不起作用背后的逻辑是什么?