R - Как вы ссылаетесь на границы заданных объектов? - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с интервальными объектами в пакете sets в R (документация здесь ). Эти объекты представляются в виде списков, но у меня возникают проблемы при манипулировании их элементами. Вот пример интервала, его структура и класс. Созданный объект имеет класс "interval", и структура показывает, что это тип списка, содержащий граничные точки интервала, логические значения для его закрытия на границах и атрибут, указывающий, что это интервал действительных чисел.

#Create and print an interval
INTERVAL <- sets::interval(l = 3, r = 9, bounds = 'closed');
INTERVAL;
[3, 9]

#Show class
class(INTERVAL);
[1] "interval"

#Show structure
str(INTERVAL);
List of 1
 $ :List of 4
  ..$ l : num 3
  ..$ r : num 9
  ..$ lc: logi TRUE
  ..$ rc: logi TRUE
 - attr(*, "domain")= chr "R"

#Extract boundary values
min(INTERVAL);
[1] 3

max(INTERVAL);
[1] 9

В настоящее время я могу извлечь граничные значения, используя вышеупомянутые команды, но я не могу переназначить их, когда они уже созданы. Я пытался ссылаться на значения из списка. Можно использовать операции над множествами из пакета sets для объединения или пересечения множеств, поэтому я мог бы сделать это таким образом, но я хочу иметь возможность напрямую изменять объект без выполнения операции над множеством.

Мой вопрос: Как мне ссылаться на граничное значение из объекта INTERVAL выше? Какой самый простой способ заменить одну из ее границ другим значением?

1 Ответ

1 голос
/ 20 апреля 2020

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

Используя unclass здесь, чтобы получить каждый из элементов и присваивание в данном объекте. Если вы расклассифицируете его, вы можете получить отдельный доступ к каждому компоненту списка и затем отредактировать его.

INTERVAL <- sets::interval(l = 3, r = 9, bounds = 'closed');
intval <- unclass(INTERVAL)
intval[[1]]$l <- 0
class(intval) <- 'interval'

Вывод:

   # > print(intval)
   # [0, 9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...