У меня есть пользовательская функция:вызова пользовательской функции с индексированным векторным аргументом
f <- function(N, zero_per, sed) {
set.seed(sed)
M <- N-(N*zero_per)
y_g <- rgamma(M, shape=rnorm(M,1,2), rate=rnorm(M,1,2))
df_g <- data.frame(y=y_g)
df_l <- data.frame(y=rep(0, N-M))
df <- rbind(df_g, df_l)
return(df)
}
эта функция является частью цикла, где я использую последовательность для второго аргумента:
> sq <- seq(0.05, 0.7, 0.05)
> sq
[1] 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70
12-й позиции имеет значение 0,6:
> sq[12]
[1] 0.6
Однако, когда я вызываю функцию, один раз с числовым аргументом 0. 6, и один раз с sq [12], я получаю разные результаты:
> head(f(5000, sq[12], 1))
y
1 NaN
2 NaN
3 NaN
4 0.7547084
5 1.0643216
6 NaN
Warning message:
In rgamma(M, shape = rnorm(M, 1, 2), rate = rnorm(M, 1, 2)) : NAs produced
> head(f(5000, 0.6, 1))
y
1 NaN
2 NaN
3 NaN
4 0.8990203
5 1.0719659
6 NaN
Warning message:
In rgamma(M, shape = rnorm(M, 1, 2), rate = rnorm(M, 1, 2)) : NAs produced
Я использую одно и то же семя.
Как ни странно, это не происходит, когда я использую 0.5:
> head(f(5000, sq[10], 1))
y
1 NaN
2 NaN
3 NaN
4 0.4426849
5 NaN
6 NaN
Warning message:
In rgamma(M, shape = rnorm(M, 1, 2), rate = rnorm(M, 1, 2)) : NAs produced
> head(f(5000, 0.5, 1))
y
1 NaN
2 NaN
3 NaN
4 0.4426849
5 NaN
6 NaN
Warning message:
In rgamma(M, shape = rnorm(M, 1, 2), rate = rnorm(M, 1, 2)) : NAs produced
Предупреждения могут быть проигнорированы, они просто так, потому что я урезанная свою реальную функцию.
Что здесь происходит?
Try 'кв [12] - 0.6' и видеть, что он не равен нулю. Классический пример [R FAQ 7.31] (https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f), * " Почему R не считает эти цифры равными? »*. – r2evans