Функция, которая возвращает следующие 50 високосных лет
Мне нужно создать функцию, которая будет возвращать следующие 50 високосных лет, начиная со следующего високосного года после года ввода в R. Проблема в том, что мне нужно сохранить его как вектор.
x <- function(year){
year1 <- year + 205
for(i in year:year1){
if((i %% 4 == 0) & (i %% 100 != 0) | (i %% 400 == 0)){
print(i)
}
next
}
}
В этой функции я создал вектор для лет, которые будут включать, по крайней мере, следующие 50 високосных лет, но я предполагаю, что есть способ, когда R просто замыкает цикл, когда он имеет 50 значений в векторе. Спасибо!
2 ответа
lubridate
пакет имеет leap_year
функция, которая проверяет, является ли год високосным или нет. Вы могли бы использовать это
y = 2016
vec = seq(from = y+1, to = y + 60*4, by = 1)
#Start at y+1 so that we exclude the given year
#Choose 60 to make sure we get at least 50 leap years
library(lubridate)
head(vec[leap_year(vec)], 50)
# [1] 2020 2024 2028 2032 2036 2040 2044 2048 2052
#[10] 2056 2060 2064 2068 2072 2076 2080 2084 2088
#[19] 2092 2096 2104 2108 2112 2116 2120 2124 2128
#[28] 2132 2136 2140 2144 2148 2152 2156 2160 2164
#[37] 2168 2172 2176 2180 2184 2188 2192 2196 2204
#[46] 2208 2212 2216 2220 2224
Ты можешь сделать:
leap50 <- function(y) {
y <- y - y %% 4 + 4
y <- y + 4*(0:60)
y[(y %% 100) !=0 | (y %% 400)==0][1:50]
}
leap50(2016)
leap50(2017)
leap50(2316)
# > leap50(2016)
# [1] 2020 2024 2028 2032 2036 2040 2044 2048 2052 2056 2060 2064 2068 2072 2076 2080 2084 2088 2092
# [20] 2096 2104 2108 2112 2116 2120 2124 2128 2132 2136 2140 2144 2148 2152 2156 2160 2164 2168 2172
# [39] 2176 2180 2184 2188 2192 2196 2204 2208 2212 2216 2220 2224
# > leap50(2017)
# [1] 2020 2024 2028 2032 2036 2040 2044 2048 2052 2056 2060 2064 2068 2072 2076 2080 2084 2088 2092
# [20] 2096 2104 2108 2112 2116 2120 2124 2128 2132 2136 2140 2144 2148 2152 2156 2160 2164 2168 2172
# [39] 2176 2180 2184 2188 2192 2196 2204 2208 2212 2216 2220 2224
# > leap50(2316)
# [1] 2320 2324 2328 2332 2336 2340 2344 2348 2352 2356 2360 2364 2368 2372 2376 2380 2384 2388 2392
# [20] 2396 2400 2404 2408 2412 2416 2420 2424 2428 2432 2436 2440 2444 2448 2452 2456 2460 2464 2468
# [39] 2472 2476 2480 2484 2488 2492 2496 2504 2508 2512 2516 2520