Nano Hash - криптовалюты, майнинг, программирование

Как обновить условную формулу?

позвольте мне сразу перейти к примеру. Рассмотрим следующее уравнение:

 frml <- formula(y ~ a + b | x + z )

Такая спецификация формулы используется, например. с AER::ivreg.

Я хотел бы обновить эту формулу, чтобы она читалась

 frml2 <- y ~ a + b + c | x + z + w

Однако я не уверен, как обновить части до и после условного знака | отдельно. Например,

 frml2 <- update.formula(frml, . ~ . + c | . + w)

дает

 y ~ ((a + b | x + z) + c | (a + b | x + z) + w)

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

Кажется, один из способов состоит в том, чтобы преобразовать формулу в вектор символов, разделить вектор по |, добавить все, что я хочу добавить, и снова собрать формулу. Хотя это легко, почему-то я чувствую, что должен быть более простой способ сделать это. Я, конечно, не первый человек, который сталкивается с такой проблемой. Любой совет/подсказка/комментарий будет принят с благодарностью!

04.02.2015

Ответы:


1

Не могу точно сказать из вашего вопроса, если вы не можете использовать пакет, потому что в пакете Formula есть функция только для этого. Он классифицирует свои объекты как formula, так и Formula:

> library(Formula)
> frml <- Formula(y ~ a + b | x + z )
> update(frml, . ~ . + c | . + w)
y ~ a + b + c | x + z + w
> class(frml)
[1] "Formula" "formula"
04.02.2015
  • Потрясающе, именно то, что я искал! Не знал этого пакета. Большое спасибо! 05.02.2015

  • 2

    Вот метод, который не требует внешнего пакета. Он использует структуру формулы:

     frml[[3]][[2]] <- quote(a+b+c)
     frml[[3]][[3]] <- quote(x + z + w)
     frml
    #y ~ a + b + c | x + z + w
    

    Хотя объект-формула отображается с инфиксным формализмом, для хранения объекта формулы используются функции и списки R. Первый компонент формулы (как и любого вызова функции) — это «~», второй — выражение слева, а третий — справа. Точно так же RHS в этом случае также структурирован аналогично "|" как первый элемент. Итак, вы хотите настроить таргетинг на 2-й и третий элементы 3-го элемента объекта. Итак, это frml[[3]][[2]] и frml[[3]][[3]]. Вам нужно передать значение языка, которое выполняет функция quote. Объект формулы также может быть выражен в более «функциональной» версии:

     identical(frml,   # after the mods
                `~`(y, `|`(a + b + c, x + z + w)),
                ignore.environment=TRUE)
    #[1] TRUE
    
    04.02.2015
  • Спасибо за этот трюк! Мне нравится quote-трюк. Раньше я преобразовывал формулы в символы и манипулировал ими таким образом, но это намного лучше. Спасибо! 05.02.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..