2016-07-11 2 views
0

У меня снова возникает эта досадная ошибка в R, которая, как я думал, я хорошо поняла, и я мог бы избежать ее в течение достаточно длительного времени. Но теперь он снова преследует меня.Интеграция R: оценка функции дала результат неправильного типа

inner.f.y <- function(y) 
{ 
    cat("length(y) ", length(y), "\n") 

    t<-2*y*exp((exp(-1*1i)-1)*y) 

    cat("length(t) ", length(t), "\n") 
    t 
} 
integrate(inner.f.y, lower = 0.01, upper = 8) 

Это выход на консоли

> integrate(inner.f.y, lower = 0.01, upper = 8) 
length(y) 21 
length(t) 21 
Error in integrate(inner.f.y, lower = 0.01, upper = 8) : 
    evaluation of function gave a result of wrong type 

Так что это может быть этот вопрос?

ответ

3

См ?integrate (курсив мой):

F: функция R принимает числовой первый аргумент и возвращает числовой вектор той же длины.

Ваша функция inner.f.y не возвращает числовой вектор, но сложный:

a <- inner.f.y(1) 

is.numeric(a) 
[1] FALSE 

is.complex(a) 
[1] TRUE 

Как следует @Ben Bolker, вы могли бы использовать вместо elliptic::myintegrate:

elliptic::myintegrate(inner.f.y, lower = 0.01, upper = 8) 
length(y) 21 
length(t) 21 
length(y) 21 
length(t) 21 
[1] -1.150277-1.380324i 
+1

'библиотека (СЦ); findFn ("интегрировать комплекс") 'вызывает (среди прочих) http://finzi.psych.upenn.edu/R/library/elliptic/html/myintegrate.html –

Смежные вопросы