【问题标题】:convert string to unique integer form将字符串转换为唯一的整数形式
【发布时间】:2021-10-28 11:22:55
【问题描述】:

我有一个字符串向量,就我而言,字符串是逻辑规则。 有很多这样的规则,但为了清楚起见,我只展示了三个。

rules <- c("X[,1]>0.5 & X[,2]<1" , "X[,3]>0.2" , "X[,3]>0.3")

我想将规则转换为整数形式,类似的东西

rules <- c("X[,1]>0.5 & X[,2]<1" , "X[,3]>0.2" , "X[,3]>0.3")
int <- rbind(c(0,0,2,5,0,1,0,0,1,0),c(1,2,0,0,0,0,0,0,0,0),c(1,1,0,0,0,0,0,0,0,0))

.

cbind.data.frame(rules,int)
                rules 1 2 3 4 5 6 7 8 9 10
1 X[,1]>0.5 & X[,2]<1 0 0 2 5 0 1 0 0 1  0
2           X[,3]>0.2 1 2 0 0 0 0 0 0 0  0
3           X[,3]>0.3 1 1 0 0 0 0 0 0 0  0

三个条件

  1. 所有int 向量的长度必须相同

  2. 如果规则(字符串)与另一个字符串相似,那么intvectors 也应该相似。为了能够计算字符串或intvectors 之间的距离,这是必要的。

  3. 能够将字符串转换为 int 形式,以及将 int 形式转换为字符串

这样的转换可能吗?

【问题讨论】:

  • 是否有一个 X 对象可以评估这些规则(看起来像 R 表达式)?我不明白我们应该如何知道如何生成这些数字序列。
  • 好吧,想象一下“规则”只是一个普通的向量:rules
  • 当然...但我仍然不明白如何从"AAA" 转到c(0,0,2,5,0,1,0,0,1,0)。似乎随意。字符串与名为"1""10" 的列之间有什么关系?
  • 我认为X[,1] (在您的rules 中)可能暗示矩阵或类似框架的对象中的第一列,但您的评论表明并非如此。我还认为这可能是字符串中字符位置的推导,但每个字符中的字符数并不适用。
  • 问题是我也不知道怎么弄到这个,我还以为有办法呢...比如这个包里fnoorian.github.io/gramEvol/inst/doc/ge-intro.html任何表达式都可以并且每个表达式都有自己独特的基因型prntscr.com/1qqfwm2

标签: r string integer transform


【解决方案1】:

如果所有规则都与您显示的规则相似,一种方法是生成标准X 矩阵,解析每个规则并将它们应用于 X。这将生成 TRUE 和 FALSE (很容易转换为 1 和 0),长度为 nrow(X)

例如,

set.seed(123)
X <- matrix(runif(3000, 0, 2), nrow = 1000)
rules <- c("X[,1]>0.5 & X[,2]<1" , "X[,3]>0.2" , "X[,3]>0.3")
int <- matrix(NA, nrow = length(rules), ncol = nrow(X))
for (i in seq_along(rules)) 
  int[i,] <- as.numeric(eval(parse(text = rules[i])))
rownames(int) <- rules

dist <- matrix(NA, length(rules), length(rules),
               dimnames = list(rules, rules))
for (i in seq_along(rules)) 
  for (j in seq_along(rules)) 
    dist[i, j] <- sqrt(sum((int[i,] - int[j,])^2))

dist
#>                     X[,1]>0.5 & X[,2]<1 X[,3]>0.2 X[,3]>0.3
#> X[,1]>0.5 & X[,2]<1             0.00000  24.67793  24.28992
#> X[,3]>0.2                      24.67793   0.00000   7.28011
#> X[,3]>0.3                      24.28992   7.28011   0.00000

reprex package (v2.0.0) 于 2021 年 8 月 29 日创建

【讨论】:

  • 你正在做一个距离矩阵,但它对我不起作用,我的“规则”向量太大,我想为每个“规则”获取唯一的 ID
  • 您需要更具体地了解问题所在。真正的rules向量有多大?
  • “规则”向量中的几千万个元素,我还要数很多次
  • 为什么不在int生成后停止我的计算,甚至写一个函数来计算单个int行,而不保存任何一个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2015-03-21
  • 1970-01-01
  • 2022-01-23
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多