首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >成对数据的适当数据结构及其功能扩展

成对数据的适当数据结构及其功能扩展
EN

Stack Overflow用户
提问于 2012-07-05 15:51:51
回答 2查看 151关注 0票数 1

这个问题分为两个部分。

  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模型创建类,以便将此功能放入其中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-08 19:40:45

两列data.frame似乎是合适的:

代码语言:javascript
运行
复制
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函数来实现。例如:

代码语言:javascript
运行
复制
approx(xy$x, xy$y, xout = 0.3)
# $x
# [1] 0.3
# 
# $y
# [1] 6

如果要将该结果添加到data.frame中,可以执行以下操作:

代码语言:javascript
运行
复制
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

这有点贵,特别是当你打算一次加一个点的时候。相反,您可以一次添加所有的点,因为结果与添加它们的顺序无关:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2012-07-05 17:26:01

不太确定你得到了什么,但是也许包hash可能有你想要的东西

代码语言:javascript
运行
复制
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可能会暗示在第二个问题上有所帮助。

具有列表的类似结构

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11348049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档