是否有 R 函数来查找列表中元素的下一个位置
Is there a R function to find the next position of an element in a list
我想创建一个 returns 第二天
的函数
这是我得到的:
next_day <- function(day){
+ week = list('monday','tuesday','wednesday','thursday','friday','saturday','sunday')
+ pos <- index(day, week)
+ if(day=='sunday') return('monday')
+ if match(day,week) return week[pos+1]
Error: unexpected symbol in:
" + if(day=='sunday') return('monday')
+ if match"
nextday <- function(day){
week <- list('monday','tuesday','wednesday','thursday','friday','saturday','sunday')
day <- stringr::str_to_lower(day)
index <- match(day, week)
if(index == 7){
index = 0
}
week[[index+1]]
}
nextday("sunday")
输出:
[1] "monday"
这是解决您问题的另一种方法。
next_day <- function(day) {
days <- c(sunday='monday', monday='tuesday', tuesday='wednesday',
wednesday='thursday', thursday='friday', friday='saturday',
saturday='sunday')
unname(days[tolower(day)])
}
# find next day for a single day
next_day("sunday")
[1] "monday"
# find next days for many days
next_day(c("sunday", "monday", "friday"))
[1] "monday" "tuesday" "saturday"
使用%%
:
next_day <- function(day){
week = c('monday','tuesday','wednesday','thursday','friday','saturday','sunday')
week[ (match(day, week) %% 7) + 1 ]
}
#testing
next_day("tuesday")
# [1] "wednesday"
next_day("sunday")
# [1] "monday"
我会使用闭包,不需要在每次调用函数时都创建天数向量。
next_day <- (function(week) {
function(day) {
week[1 + match(day, week)]
}
})(weekdays(seq(as.Date("2000-1-1"), by=1, length.out = 8)))
next_day("Sunday")
#[1] "Monday"
next_day(c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))
#[1] "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday" "Monday"
万一 upper/lower-case 事情在 match
tolower
或 toupper
.
期间另外使用
我想创建一个 returns 第二天
的函数这是我得到的:
next_day <- function(day){
+ week = list('monday','tuesday','wednesday','thursday','friday','saturday','sunday')
+ pos <- index(day, week)
+ if(day=='sunday') return('monday')
+ if match(day,week) return week[pos+1]
Error: unexpected symbol in:
" + if(day=='sunday') return('monday')
+ if match"
nextday <- function(day){
week <- list('monday','tuesday','wednesday','thursday','friday','saturday','sunday')
day <- stringr::str_to_lower(day)
index <- match(day, week)
if(index == 7){
index = 0
}
week[[index+1]]
}
nextday("sunday")
输出:
[1] "monday"
这是解决您问题的另一种方法。
next_day <- function(day) {
days <- c(sunday='monday', monday='tuesday', tuesday='wednesday',
wednesday='thursday', thursday='friday', friday='saturday',
saturday='sunday')
unname(days[tolower(day)])
}
# find next day for a single day
next_day("sunday")
[1] "monday"
# find next days for many days
next_day(c("sunday", "monday", "friday"))
[1] "monday" "tuesday" "saturday"
使用%%
:
next_day <- function(day){
week = c('monday','tuesday','wednesday','thursday','friday','saturday','sunday')
week[ (match(day, week) %% 7) + 1 ]
}
#testing
next_day("tuesday")
# [1] "wednesday"
next_day("sunday")
# [1] "monday"
我会使用闭包,不需要在每次调用函数时都创建天数向量。
next_day <- (function(week) {
function(day) {
week[1 + match(day, week)]
}
})(weekdays(seq(as.Date("2000-1-1"), by=1, length.out = 8)))
next_day("Sunday")
#[1] "Monday"
next_day(c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))
#[1] "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday" "Monday"
万一 upper/lower-case 事情在 match
tolower
或 toupper
.