R - 如何引用集合对象的边界?

问题描述 投票:0回答:1

我正在使用 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 以上? 用另一个值替换其一个边界的最简单方法是什么?

r set
1个回答
1
投票

你可以试试这种方式,它的方式有点黑客,但我希望这能帮助你。我不确定你是否想做这样的作业,你可能需要再详细说明一下。我可能完全误解了你的意思。请告诉我。

在这里使用unclass来获取每个元素并分配到给定的对象中.如果你unclass它,你可以单独访问每个列表组件,然后编辑它。

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

输出。

   # > print(intval)
   # [0, 9]
© www.soinside.com 2019 - 2024. All rights reserved.