сохраните имя элемента входного вектора в выходных данных функции в R

#r #dataframe #function #vector

Вопрос:

У меня есть две функции f1 и f2 . В своих выходных данных f1 всегда сохраняет имя элемента введенного вектора x .

Но в его выводе f2 всегда удаляется имя элемента введенного вектора x .

Есть ли способ f2 сохранить имя элемента в его выходных данных таким f1 же образом ?

 x <- 1:10
x <- setNames(x, letters[1:10])

f1 <- function(x, n){
  
  sort(x)[n]
} 
# EXAMPLE OF USE:
f1(x, 2)

# OUTPUT:
# b       # Notice "b"
# 2

f2 <- function(x, n){
  
  len <- length(x)
  sort(x, partial = len-n 1)[len-n 1]
}

# EXAMPLE OF USE:
f2(x, 2)

# OUTPUT:
# [1] 9     # Notice no name is attached to 9.
 

Ответ №1:

В sort функции говорится, что если partial это не null так , имена отбрасываются. См. Документацию по функции сортировки. В f2 , sort(x, partial = len-n 1)[len-n 1] , просто немного более грязно,

 f2 <- function(x, n){
  
  len <- length(x)
  x[x == sort(x, partial = len-n 1)[len-n 1]]
}
f2(x, 2)

i 
9
 

но это сохранит ценность имени.