Рассмотрим этот пример:
library(tidyverse)
# function my.sum(v)
# arguments:
# v - numeric vector
# returns:
# numeric value
#
# accepts the vector as single argument,
# returns sum of the vector elements.
my.sum <- function (v) {
return(sum(v))
}
# function my.inverse(val)
# arguments:
# val - numeric value
# returns:
# numeric value
#
# changes sign of the argument and returns it
my.inverse <- function (val) {
return(- val)
}
data.frame(x = rnorm(10, mean = 0, sd = 1),
y = rnorm(10, mean = 5, sd = 3)) %>%
mutate(my_sum = my.sum(c(x,y)),
my_inverse = my.inverse(x))
результат выполнения:
x y my_sum my_inverse
1 -1.3299817 3.359306 49.23083 1.3299817
2 1.3657651 4.636359 49.23083 -1.3657651
3 -0.2122119 1.760494 49.23083 0.2122119
4 0.7002765 7.396804 49.23083 -0.7002765
5 -0.5828975 4.811493 49.23083 0.5828975
6 1.1202625 4.294421 49.23083 -1.1202625
7 1.2512032 4.907165 49.23083 -1.2512032
8 0.9228939 5.215929 49.23083 -0.9228939
9 0.1800447 0.666941 49.23083 -0.1800447
10 -0.8906996 9.657261 49.23083 0.8906996
Как видно, столбец my_inverse
, возвращаемый функцией my.inverse(val)
, получает значение из столбца x
, выполняет отрицание и записывает результат, как и ожидалось.
Столбец my_sum
, который является возвращением функции my.sum(v)
, состоит из константы в каждой строке. Эта константа является суммой соединенных элементов двух целых векторов x
и y
:
sum(c(x, y))
Я ожидаю, что функция my.sum()
внутри директивы mutate()
получит значения x
и y
в одной строке и объединит их в c(x, y)
, но, как я вижу, c()
ведет себя так закрытие.
Как можно избежать этого поведения R?