gpt4 book ai didi

r - 网格单元向量中的元素替换

转载 作者:行者123 更新时间:2023-12-04 09:21:19 24 4
gpt4 key购买 nike

我已经被这个问题搞糊涂了好几次了,所以这里有一个虚构的问题,供其他可能偶然发现同样问题的人使用。

考虑这个网格单位向量,

a = unit(1:3, c("cm", "in", "npc"))

我想用新值替换一些元素。自然的方法是,
a[1] = unit(2,"pt")
a
# [1] 2cm 2in 3npc

出了点问题:只更改了数值,而不是单位。为什么?该怎么办?

编辑:正如下面的一个答案所指出的,这些单位只是具有属性的数字向量。然而,他们的后代 unit.arithmeticunit.list也应该被认为是完全通用的解决方案(例如,用于调整 ggplot 对象的面板大小)。考虑这个单位向量,
(b = a + unit(1, "npc"))
# [1] 1cm+1npc 2in+1npc 3npc+1npc
# [1] "unit.arithmetic" "unit"

现在替换特定元素更加棘手,因为它们不再是原子的。

最佳答案

在与 Paul Murrell 讨论之后(有趣的是,我重新发明了 figured out before ),问题在于没有 [<-网格单元的方法。长期的解决办法是实现这些方法,但这并不是微不足道的,因为网格单元带有诸如 unit.arithmetic 和 unit.list 之类的兄弟,并且它们的交互可能变得难以理解。

更简单的面向用户的修复是将此类单位向量转换为 unit.list 对象,这将继承更像常规 R 列表的访问器方法。可以使用未导出的函数 grid:::unit.list() 完成对 unit.list 对象的提升。 .

a = unit(1:3, c("cm", "in", "npc"))
b = grid:::unit.list(a)
is.list(b) # check that indeed this is a list object, thanks @Josh O'Brien
# [1] TRUE
# so now we can use standard list methods
b[[1]] = unit(2,"pt")
b
#[1] 2pt 2in 3npc

关于r - 网格单元向量中的元素替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com