Я пытался понять, когда необходимо использовать функции apply или map и использовать формулы внутри них, но без особого успеха, потому что я не вижу логики того, что вызывается или нет.Вот простой пример использования mutate:
library(tidyverse)
df <- tibble(
a = 1:5,
b = 3:7,
c = 5:9
)
df %>%
mutate(new = a)
Каждый элемент new является соответствующим элементом.
df %>%
mutate(new = 1 == a)
Каждый элемент new равен TRUE of 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 значений).Я хочу, чтобы первый элемент вектора соответствовал каждой строке, поэтому он возвращает одно число.Да, я знаю, что могу сделать это с помощью функции карты и формулы, но какова логика, почему она работает или нет?