首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于问卷评分的切换式功能

用于问卷评分的切换式功能
EN

Stack Overflow用户
提问于 2011-09-05 07:09:54
回答 3查看 154关注 0票数 3

我最近做了一个严肃的PHP/JS编码,我的R肌肉有点失去了。虽然这个问题在PHP/JS中很容易解决,但解决这个问题最有效的方法是什么:我必须给一份问卷评分,我有以下场景:

代码语言:javascript
复制
raw    t
5      0
6      2
7-9    3
10-12  4
15-20  5

如果x等于或在raw中给定的范围内,则返回t中相应行的值。当然,这可以使用for循环或switch来完成,但是可以想象一下raw中非常长的一组值范围。你将如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-05 07:40:13

我们似乎遗漏了示例的一部分,因为没有提到"x“。

代码语言:javascript
复制
dat <- read.table(textConnection("raw    t
 5      0
 6      2
 7-9    3
 10-12  4
 15-20  5"), header=TRUE, stringsAsFactors=FALSE)
dat$bot <- as.numeric( sapply( sapply(dat$raw, strsplit, "-"), "[", 1 ))
get.t <- function(x) findInterval(x, dat$bot)
 get.t(8)
#[1] 3
> dat$t[get.t(6)]
[1] 2
> dat$t[get.t(5)]
[1] 0
票数 5
EN

Stack Overflow用户

发布于 2011-09-05 07:46:58

我会简单地使用类似于Corbin提到的索引方案,但由于他没有提供示例,下面是一个简单的示例:

代码语言:javascript
复制
m <- cbind(c(5:12,15:20),
           rep(c(0,2,3,4,5),times = c(1,1,3,3,6)))

m[m[,1] == 11,2]
[1] 4
票数 2
EN

Stack Overflow用户

发布于 2011-09-05 07:25:10

注意:与Simone的答案非常相似,因为我刚才开始输入这段代码。不过在结尾有个注解。我给出的索引方法本质上就是Simone的答案。

一定会有一个循环涉及到某个地方。

我要做的伪代码是这样的:

代码语言:javascript
复制
score = blah

for each raw => t
    break raw into rMin -> rMax
    if(rMin <= score and rMax >= score)
        return t

它避免了循环遍历rMin和rMax之间的每个数字(我假设您指的就是这个意思),但如果没有某种索引,这就是最好的结果。

注意:如果您对此有大量的调用,并且索引实际上是值得的,那么最简单的索引类型就是score -> t条目的哈希图。

基本上,您可以将示例数据解析为以下内容:

代码语言:javascript
复制
index[5] = 0
index[6] = 2
index[7] = 3
index[8] = 3
index[9] = 3

您需要仔细权衡构建索引是否比仅在范围内循环更耗时。

注:索引方法实际上就是Simone所说的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7302695

复制
相关文章

相似问题

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