Пожалуйста, запустите следующий воспроизводимый код:Об использовании и выходе внешний()
require(compiler)
a <- 1:80
n <- 1:140
fn <- cmpfun(function(a, n)
{
K <- ceiling(runif(n, min = 1, max = 80))
p <- length(K[K >= min(80, a + 5)])/n
return(p)
})
Это, несомненно, функция fn()
возвращает число меньше 1
, из-за того, что она должна вернуть частота случайных чисел от K
, которые больше a + 5
; это можно проверить с помощью случайных целочисленных входов в fn()
:
for(i in seq(8, 80, 8))
{
for(j in seq(14, 140, 14))
{
print(fn(i,j))
}
}
Теперь я хотел бы получить перекрестную функцию fn()
применительно к a
и n
массивов, и я думал, что outer()
был лучшим решением:
Внешним продуктом массивов
X
иY
является массивA
с размеромc(dim(X), dim(Y))
, где элементA[c(arrayindex.x, arrayindex.y)] = FUN(X[arrayindex.x], Y[arrayindex.y], ...)
.
Я бы ожидать, чтобы получить выход из 0
в 1
но
persp(x = a, y = n, z = outer(X = a, Y = n, FUN = fn),
ticktype = 'detailed', phi = 30, theta = 120)
делает возвращение этот вывод, а:
Что мне не хватает в использовании outer()
?
Но разве 'n' не должно быть единственным номером в моей функции? Это не массив, не так ли? Тогда он должен сделать отношение 'K' (' x' в вашем примере) к одному номеру, а не к массиву ... –
Вы считаете, что n - длина одного вектора. Базовые функции, которые вы используете, не предполагайте этого. – Roland