这个问题分为两个部分。
{[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模型创建类,以便将此功能放入其中?
发布于 2012-07-08 19:40:45
两列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
发布于 2012-07-05 17:26:01
不太确定你得到了什么,但是也许包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
对于第二部分,您可以构造一个简单的函数,用一个新的值更新散列/列表。
https://stackoverflow.com/questions/11348049
复制相似问题