我正在使用 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
以上? 用另一个值替换其一个边界的最简单方法是什么?
你可以试试这种方式,它的方式有点黑客,但我希望这能帮助你。我不确定你是否想做这样的作业,你可能需要再详细说明一下。我可能完全误解了你的意思。请告诉我。
在这里使用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]