R-遍历列表并计算要存储在矩阵中的值

如何解决R-遍历列表并计算要存储在矩阵中的值

晚上好, 我有以下列表:

        lf <- 1 / 100 * c(
  A = 6.756,B = 1.234,C = 2.302,D = 3.518,E = 10.508,F = 1.843,G = 1.667,H = 5.041,I = 5.763,J = 0.127,K = 0.639,L = 3.330,M = 1.990,N = 5.583,O = 6.210,P = 1.596,Q = 0.079,R = 4.953,S = 5.234,T = 7.492,U = 2.282,V = 0.809,W = 1.952,X = 0.124,Y = 1.633,Z = 0.061,` ` = 17.272)

文字

text <- c("THIS IS A TEST")

我正在尝试编写一个循环,以使文本中的每个字母都从lf接收正确的数字。 我希望将其存储在矩阵中,以便在应用函数后可以找到最大值。

我从

开始
  n <- length(lf)
mat <- matrix(ncol=2,nrow=n)

for (i in 1:n) {

  var1[[i]] <- 

}

但是我似乎无法解决这个问题。 如何编写遍历列表(lf)的值并将每个计算出的值存储在矩阵中的函数

非常感谢您的帮助=)

上面的数字表示对数似然(它是一个密码问题)。我想找到一个字母(即“ K”)在尝试解密一个一个字母加密的代码时给出的所有可能性中最低的总和。

我发现了如何获取给定文本(包括空格)的总和

sum(log(letterfrequencies[match(plaintext,names(letterfrequencies))]))

现在,当我尝试在密文中的每个字母时,我必须找到最低的对数可能性,为此我认为我需要一个循环来尝试每个字母

(由于我没有正确解释问题,因此我删除了上一个问题)

解决方法

您可以无循环执行此操作:

     0 0      
     1 1      
  1000 10000  
  1001 10001  

如果您只想对单个字母的值求和,则应该使用一个小的包装函数:

sapply(strsplit(text,""),function(x) lf[x])
#>      [,1]
#> T 0.07492
#> H 0.05041
#> I 0.05763
#> S 0.05234
#>   0.17272
#> I 0.05763
#> S 0.05234
#>   0.17272
#> A 0.06756
#>   0.17272
#> T 0.07492
#> E 0.10508
#> S 0.05234
#> T 0.07492

这允许您执行以下操作:

sum_letters <- function(letter,text) {
  sum(strsplit(text,"")[[1]] %in% letter) * lf[letter]
}

或获取字母表中所有字母的总和:

sum_letters("T",text)
#>       T 
#> 0.22476

从而找到最合适的位置:

sums <- sapply(LETTERS,sum_letters,text = text,USE.NAMES = FALSE)

sums
#>       A       B       C       D       E       F       G       H       I       J 
#> 0.06756 0.00000 0.00000 0.00000 0.10508 0.00000 0.00000 0.05041 0.11526 0.00000 
#>       K       L       M       N       O       P       Q       R       S       T 
#> 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.15702 0.22476 
#>       U       V       W       X       Y       Z 
#> 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000

reprex package(v0.3.0)于2020-11-01创建

,

我们可以直接使用matrix

as.matrix( lf[regmatches(text,gregexpr('[A-Z ]',text))[[1]]])

-输出

#    [,1]
#T 0.07492
#H 0.05041
#I 0.05763
#S 0.05234
#  0.17272
#I 0.05763
#S 0.05234
#  0.17272
#A 0.06756
#  0.17272
#T 0.07492
#E 0.10508
#S 0.05234
#T 0.07492

如果我们需要一个sum分组的人

v1 <- lf[regmatches(text,text))[[1]]]
tapply(v1,names(v1),FUN = sum)
#          A       E       H       I       S       T 
#0.51816 0.06756 0.10508 0.05041 0.11526 0.15702 0.22476 

如果我们需要包括所有LETTERS

sapply(split(v1,factor(names(v1),levels = LETTERS)),sum)
#      A       B       C       D       E       F       G       H       I       J       K       L       M       N       O       P 
#0.06756 0.00000 0.00000 0.00000 0.10508 0.00000 0.00000 0.05041 0.11526 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 
#      Q       R       S       T       U       V       W       X       Y       Z 
#0.00000 0.00000 0.15702 0.22476 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?