是否有 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 tolowertoupper.

期间另外使用