1

问题有 2 个部分。

  1. 这是 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)这个数据结构中耦合

  2. 假设我添加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 类模型创建可以放置此功能的类?

4

2 回答 2

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

对于您的第二部分,您可以构建一个简单的函数来使用新值更新您的哈希/列表。

于 2012-07-05T17:26:01.770 回答
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
于 2012-07-08T19:40:45.230 回答