这个问题有2个部分。
R中允许存储配对数据的数据结构是什么:
0:0
0.5:10
1:20
(Python字典{[0]:0, [0.5]:10, [1]:20}
)
以及如何使用一个衬垫启动它?即结合seq(0,1,by=0.5)
在此数据结构中使用seq(0,10,by=5)
假设我将0.25
添加到列表中,然后我希望相邻节点的加权平均值(自动)出现在数据集中,即元素0.25:5
和配对集会是
0:0
0.25:5
0.5:10
1:20
如果我添加元素0.3
,则必须将其与5+(10-5)*(0.3-0.25)/(0.5-0.25)=6
和元素0.3:6
配对才能添加。
如何创建具有S4或Reference Class类模型的类,我可以使用此功能?
答案 0 :(得分:1)
不确定您的目标是什么,但包hash
可能包含您想要的内容
library(hash)
h<-hash(keys=seq(0,1,by=0.5),values=seq(0,10,by=5))
h[['0.25']]<-2.5
可能涉及问题的第一部分。 http://cran.r-project.org/web/packages/hash/hash.pdf可能会提到第二个问题。
带列表的类似构造
lst<-list()
lst<-seq(0,10,5)
names(lst)<-seq(0,1,0.5)
> lst['0.5']
0.5
5
lst['0.25']<-2.5
对于第二部分,您可以构造一个简单的函数来使用新值更新散列/列表。
答案 1 :(得分:0)
两列data.frame似乎合适:
xy <- data.frame(x = seq(0, 1, by = 0.5), y = seq(0, 20, by = 10))
xy
# x y
# 1 0.0 0
# 2 0.5 10
# 3 1.0 20
然后,您要做的是线性插值,您可以使用approx
函数来实现。例如:
approx(xy$x, xy$y, xout = 0.3)
# $x
# [1] 0.3
#
# $y
# [1] 6
如果要将该结果添加到data.frame,可以执行以下操作:
xy <- as.data.frame(approx(xy$x, xy$y, xout = sort(c(xy$x, 0.3))))
xy
# x y
# 1 0.0 0
# 2 0.3 6
# 3 0.5 10
# 4 1.0 20
这有点贵,特别是如果您计划一次添加一个点。您可以改为一次添加所有点,因为结果与添加它们的顺序无关:
add.points <- c(0.25, 0.3)
xy <- as.data.frame(approx(xy$x, xy$y, xout = sort(c(xy$x, add.points))))
xy
# x y
# 1 0.00 0
# 2 0.25 5
# 3 0.30 6
# 4 0.50 10
# 5 1.00 20