我刚开始学习R并且对属性传播感到好奇。
我想用自定义值注释一个向量(我假设属性是正确的方法吗?),我已经能够相当容易地做到了。 (如果这是X-Y问题,给予背景)
当我开始操作这些向量时问题就开始了 - 我希望这些自定义注释能够传播,或者至少有一个明确定义的注释传播/丢失规则。 / p>
我已经对此进行了一些研究,包括this other SO question,特别针对子集函数,但我想进一步概括一下:
目标是应用这些注释,在数据上调用任意(尽可能多)R函数,并确保维护属性。特别是数据框在这里也很重要。
由于
答案 0 :(得分:1)
我认为您需要采用将“自定义值”转换为数据列而不是使用属性的做法。将此称为X-Y问题并不是非常具体,但它暗示了您有位置数字数据并且希望按行注册字符数据的概念。这正是数据帧旨在支持的。
将c()
包裹在向量周围就足以剥离其属性,因此类和属性相当脆弱。数据框是一个列表,所以这个建议实际上与flodel的建议没有对比。
答案 1 :(得分:0)
即使简单的添加也会破坏属性。在下一个示例中,仅保留y
的属性:
x <- 1:5
attr(x, "foo") <- letters[1:3]
y <- 6:10
attr(x, "foo") <- letters[4:6]
x + y
## [1] 7 9 11 13 15
## attr(,"foo")
## [1] "d" "e" "f"
正如DWin所说,他们很脆弱;可能太脆弱了你想要的东西。
为了扩展flodel的观点,一个能够有效传播所有内容的常用方法是使用带有类属性的列表。
lm
返回的模型就是典型的例子。输出太大而无法在此处显示,但如果您对lm
对象进行了分类,则会看到它只是一个列表。
model <- lm(Sepal.Length ~ Sepal.Width + Species, iris)
unclass(model)
然后你可以重载任何函数(现在是S3方法)来处理你的新类。