【发布时间】:2018-04-26 05:57:09
【问题描述】:
我正在尝试创建一个计算器,它将以循环形式编写的排列组相乘(此过程在这篇文章中进行了描述,对于不熟悉的任何人:https://math.stackexchange.com/questions/31763/multiplication-in-permutation-groups-written-in-cyclic-notation)。虽然我知道使用 Python 或其他东西会更容易做到这一点,但我想练习用 R 编写代码,因为它对我来说相对较新。
我的游戏计划是输入一个输入,例如“(1 2 3)(2 4 1)”,并将其拆分为两个单独的列表或向量。但是,我在开始这个时遇到了麻烦,因为根据我对字符函数的理解(我在这里研究过:https://www.statmethods.net/management/functions.html),我最终将不得不使用函数 grep() 来找到我的字符串中出现 ")(" 的点从那里拆分。但是,grep 仅将向量作为其参数,因此我试图将我的字符串强制转换为向量。在研究这个问题时,我大多看到人们建议使用 as.integer(unlist(str_split())) ,但是,这对我不起作用,因为当我拆分时,并非所有内容都是整数并且值变为 NA,如本例所示。
library(tidyverse)
x <- "(1 2 3)(2 4 1)"
x <- as.integer(unlist(str_split(x," ")))'
x
当不只是涉及整数时,是否有另一种方法可以将字符串转换为向量?我也意识到我试图拆分两个排列的方法非常迂回,但那是因为我研究的字符函数似乎是唯一的方法。如果有其他功能可以让这更容易,请告诉我。
谢谢!
【问题讨论】:
-
"(1 2 3)(2 4 1)"是一个一元向量,你可以像现在这样调用grep。 -
感谢您的回复!当我使用 grep 作为 1 元素向量时,当我搜索我正在寻找的表达式“)(”时它只输出 1,所以它对我来说不是很有用,因为我试图确定这一点在哪里。
-
您应该阅读
grep的文档,它可能不会像您认为的那样做。我认为与您尝试做的最接近的基本 R 匹配是regexpr("\\)\\(", x) -
我强烈建议重新考虑您的意见。如果你把
c(1, 2, 3) %cyc% c(2, 4, 1)作为输入,你只需要定义一个`%cyc%`函数进行实际操作,不需要解析任何字符串。
标签: r