Tengo la suma acumulada de días por mes como:

N_days_months = c(31,29,31,30,31,30,31,31,30,31,30,31)

N_days_months_cum <- cumsum(N_days_months)

Y una variable igual a:

DOY_first = 239

Cuando aplico la función find:

IND_DUM <- find(DOY_first < N_days_months_cum)

Recibo el siguiente error: **Error: is.character(what) is not TRUE**

  • ¿Cómo puedo resolver este problema?

  • ¿Alguien podría explicar qué está haciendo la función find aquí?

0
Sss 30 ago. 2020 a las 17:30

1 respuesta

La mejor respuesta

La función find() toma cadenas de caracteres y busca objetos en la memoria. Está intentando encontrar la primera posición en un vector numérico donde alguna condición es verdadera. Prueba esto.

Hacer la comparación devuelve un vector lógico. Las últimas cinco entradas en N_days_months_cum son mayores que 239.

DOY_first < N_days_months_cum
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

Podemos usar which() para devolver los índices de un vector lógico donde el valor es TRUE.

which(DOY_first < N_days_months_cum)
[1]  8  9 10 11 12

Para obtener el primer valor, realice un subconjunto cuyo resultado.

which(DOY_first < N_days_months_cum)[1]
[1] 8

Si desea el primer valor en N_days_months_cum que coincida con este índice, subconjine ese vector con el anterior.

N_days_months_cum[which(DOY_first < N_days_months_cum)[1]]
[1] 244
1
Ben Norris 30 ago. 2020 a las 14:46