#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
но это сохранит ценность имени.