【发布时间】:2018-12-17 13:12:47
【问题描述】:
我想做什么:
在 aphid 包中有一个函数 deriveHMM() 需要输入如下列表:
x <- list(c("c"="10.0", "b"="5.0","c"="10.0", "a"="1.0", "a"="2.0",...))
需要创建一个非常大的输入向量,例如
iv <- c(10, 5, 10, 1, 2,...)
重要的是,我的原始输入向量的顺序保持不变。
我需要通过从 .csv 文件中输入大量双精度来自动创建此列表(将双精度导入 R 工作正常)。每个双精度都必须根据与预定义值的最近距离来命名,例如:
从 0 到 2.5 的所有双精度数都应命名为“a”
从 2.5 到 7.5 的所有双精度都应命名为“b”
所有大于 7.5 的双精度数都应命名为“c”
然后所有的双精度都被转换为一个字符(或字符串 (?)),所以方法 deriveHMM() 接受输入。
我很乐意提出建议。我是 R 新手,这是我在 Stackoverflow.com 上的第一篇文章。我不是经验丰富的程序员,但我会尽力理解您的帮助。
编辑: 更新了问题,因为我需要的是“字符的命名向量列表”,就像我上面的示例一样,无需更改顺序。
【问题讨论】:
-
检查
cut及其breaks和labels参数,如所述,例如在这里:Convert continuous numeric values to discrete categories defined by intervals。然后设置结果的名称(setNames)并转换为list。 -
不幸的是它没有解决我的问题,因为我需要维护列表中命名向量的顺序
-
对不起,我不明白。如果你
cut你的向量,顺序不会改变:setNames(iv, cut(iv, c(0, 2.5, 7.5, Inf), labels = letters[1:3]))。 -
对不起,我把评论区弄错了,这对我来说有点新鲜。您的解决方案不会改变顺序,您是对的。但它仍然不被该方法接受,因为它输出了命名双精度。
-
只需要换上
as.character然后...setNames(as.character(iv), cut(iv, c(0, 2.5, 7.5, Inf), labels = letters[1:3]))
标签: r naming hidden-markov-models