2015-01-16 4 views
1

Я поддерживаю некоторый R-код, и я изучаю эту функцию, которая в основном, похоже, выполняет ту же работу в as.vector(), но делает он в самом деле кругом, скрывая путь.Я пропускаю что-то в этой функции R (преобразует из коэффициента в вектор, а затем преобразует обратно в коэффициент)

f2v <- function(x) if (is.factor(x)) levels(x)[x] else x 

И одно из способов использования функции просто излишне вызывает его.

xx <- as.factor(f2v(x)) 

Я все еще довольно свежий на R, так что я просто интересно, если я пропускаю некоторый тонкий момент здесь, что я не в состоянии оценить. Но на первый взгляд похоже, что автор действительно не понимал, что они делают, может быть, скопировать вслепую.

+0

Это действительно странный код. –

+2

'levels (x) [x]' - способ преобразования фактора в вектор символа. Это все 'f2v()' делает. Это на самом деле более эффективно, чем 'as.character (x)' –

ответ

2

Это восстановит порядок уровни вашего фактора и падение отсутствующих уровней:

x <- factor(letters[1:6], levels=rev(letters)) 
x 
# [1] a b c d e f 
# Levels: z y x w v u t s r q p o n m l k j i h g f e d c b a 
as.factor(f2v(x)) 
# [1] a b c d e f 
# Levels: a b c d e f 
as.factor(x) 
# [1] a b c d e f 
# Levels: z y x w v u t s r q p o n m l k j i h g f e d c b a 

Хотя это может показаться тонкое различие, оно будет воздействовать приложения, которые используют уровни фактора (например, ggplot для заказа категориальные переменные). Также кажется, что плохая идея - случайное падение и переупорядочение уровней факторов. Эти уровни обычно имеют смысл и должны учитываться должным образом.

+0

тонкий действительно! Отличный пример – jxramos

+0

Эта манипуляция оказалась полезной после того, как я обнаружил, что при выполнении «подстановок уровня», как в «уровнях (k) [match (« 3 », levels (k))] <-" 9 "', где ранее 'k <- as .factor (mtcars $ carb) 'дает' Уровни: 1 2 3 4 6 8', но после замены выше уровни больше не сортируются: 'Уровни: 1 2 9 4 6 8'. Создание нового вызова 'as.factor (levels (k) [k])' после выполнения кучу случайных подстановок уровня в моей работе обязательно очистило вещи, восстановив порядок уровней! – jxramos

 Смежные вопросы

  • Нет связанных вопросов^_^