首页 > 解决方案 > R - 你如何引用集合对象的边界?

问题描述

我正在使用(此处的文档)中的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上面的对象中引用边界值?用另一个值替换它的一个边界的最简单方法是什么?

标签: rset

解决方案


您可以尝试这种方式,它有点骇人听闻,但我希望这会有所帮助。我不确定你是否想做这样的作业,你可能需要详细说明一下。我可能完全误解了你。请告诉我。

在此处使用 unclass 获取每个元素并在给定对象中分配。如果您取消分类,您可以单独访问每个列表组件,然后对其进行编辑。

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

输出:

   # > print(intval)
   # [0, 9]

推荐阅读