Я хотел бы использовать функцию dplyr :: mutate, чем plyr :: ddply в конвейерной обработке - PullRequest
0 голосов
/ 09 января 2019

Я хотел бы сделать то же самое, что я сделал здесь, с помощью функции mutate, а не ddplyr. Можно ли здесь как-то выполнить не векторизованную операцию?

test <- tibble::tibble(
  x = c(1,2,3),
  y = c(0.5,1,1.5)
)
d <- c(1.23, 0.99, 2.18)

test %>% mutate(., s = (function(x, y) {
  dn <- dnorm(x = d, mean = x, sd = y)
  s <- sum(dn)
  s
})(x,y))

test %>% plyr::ddply(., c("x","y"), .fun = function(row) {
  dn <- dnorm(x = d, mean = row$x, sd = row$y)
  s <- sum(dn)
  s
})

1 Ответ

0 голосов
/ 09 января 2019

Популярный метод использует функцию dplyr: rowwise().

library(tidyverse)

test <- tibble::tibble(
  x = c(1,2,3),
  y = c(0.5,1,1.5)
)
d <- c(1.23, 0.99, 2.18)

test %>% 
  rowwise() %>%                                # prior to mutate specify calculate rowwise
  mutate(., s = (function(x, y) {
    dn <- dnorm(x = d, mean = x, sd = y)
    s <- sum(dn)
    s})(x,y))

Это дает следующий результат:

# A tibble: 3 x 3
      x     y     s
  <dbl> <dbl> <dbl>
1     1   0.5 1.56 
2     2   1   0.929
3     3   1.5 0.470
...