«Взламывая» R

Опубликовано Опубликовано в рубрике Основная, Рецепты

В поисках решения одной проблемы рылся на StackOverflow, и натолкнулся на совет, после которого моя жизнь уже никогда не будет прежней.
Для начала опишу проблему: есть некий отчет map.market {portfolio}
И почти всем он красив и пригож, но у него есть серьезные огрехи в оформлении. Везде обычно встречаются советы — сохранить в PDF и обработать после в Illustrator. Но я же не полиграфию хочу делать, а отчета красивого хочу. И в оптимизацию труда — советы дополнительной работы совсем не повышают.

Итак, код для данных и отчета:
x <- runif(120, 1, 9000000)
y <- runif(120, 0.5, 3)
z <- sqrt(x^y)
items <- paste("item",1:120)
groups <- paste("group",rep(1:3,40) )
d <- data.frame(item=items, group=groups, price=x, volume=z)


map.market(id=d$item, group = d$group,
area = d$volume, color = d$price,
lab = c(TRUE,FALSE),
main = 'map.market')

Как заметит наблюдательный читатель — во первых строках кода я чуть-чуть развлекаюсь, в попытках породить правдоподобные данные.
Получается вот такой отчет(внимание — у вас он получится другой):

Основной огрех в нем, который прям ну невозможно терпеть — это легенда.

  • У меня нет отрицательных чисел в данных — зачем она все равно зеркалируется ?
  • В бизнес-среде как то не принято большие цифры рисовать научным методом.

Ну, вот такая была моя проблема — над решением которой я довольно долго бился.
Ну как бился — пытался найти ответ в Интернете…
А теперь внимание — тот самый СОВЕТ, который перевернул мою жизнь.

А чего вы мудрите? Напишите в командной строке map.market (тут важно, что без скобок), R вам выдаст код этой функции. Вставьте ее к себе в программу и исправьте ее.

Тут все во мне перевернулось. Я конечно знал, про возможности переопределения функций, про зоны видимости… Но это у меня все больше для переменных и собственных процедур. А чтоб вот так, взять и переписать для себя часть чужого пакета — такое мне раньше и в голову не могло придти.

Дальше уже было дело техники (проб и ошибок) в попытках разобраться как все устроено в чужой функции. Все таки программирование графики на низком уровне даже в R не особо сладкое занятие.

В результате у меня получилось избавиться от перечисленных огрехов выше:

«Взламывая» R: 8 комментариев

  1. Небольшая подсказка. Для того, чтобы другой пользователь мой воспроизвести точно такие же случайные значения (и, как результат, такой же график), можно использовать функцию set.seed() перед функцией создания случайных значений.

    1. Да, спасибо. Про «повторяемые исследования» я знаю. Показалось, что в этом случае это не суть важно. Зато самому интересно перезапуская код- любоваться на новые конфигурации графика

  2. вы, возможно, имели в виду — написать map.market без скобочек=)
    читать чужой код, кстати, отличный способ прокачки собственного R-скилла.

      1. «Напишите в командной строке map.market (тут важно, что без кавычек)»
        Извините, что непонятно выразился

      2. При написании кода в RStudio можно вызвать исходный код функции для исследования/отладки по клавише F2 — откроется еще одна вкладка с исходником, разумеется, если доступен файл с исходным кодом на R… Так, нажимая F2, каждый раз спускаемся на уровень ниже — можно углубиться вплоть до примитивов функций, действительный код которых уже написан на C/Fortran

Добавить комментарий