我一直在寻找相当长一段时间,但它似乎答案似乎总是使用eval(parse(text="1+1"))
。如何计算“1 + 1”不使用eval(解析(......?
我有一列在我的数据框中,它有一个字符串列表,例如“1 + 1 * 6”,“1 * 4/3”等。我希望将这些字段计算为新列,而不使用eval(parse(
函数,因为我期望这样做它超过800万行
它基本上是一个试图回答这样一个问题:鉴于数字1:9
找到所有的解决方案,其中(A_B_C)/(D_E_F) = GHI
,其中A:I
是数字1:9
(不重复)和日下划线是四个运营商之一*, /, +,-
,也没有重复。
我创建了一个所有排列为1:9
的数据框,并且我为每个排列都计算了四个运算符的排列组合。
require(gtools)
x <- permutations(n = 9, r = 9, v = 1:9)
y <- permutations(n = 4, r = 4, v = c("*", "/", "+", "-"))
for(i in 1:nrow(x)){
for(j in 1:nrow(y)){
math <- paste("(", x[i,1], y[j,1], x[i,2],y[j,2], x[i,3],")", "/", "(", x[i,4] ,y[j,3], x[i,5] ,y[j,4], x[i,6],")")
equals <- eval(parse(text=math))
sum <- as.numeric(paste0(x[i,7], x[i,8], x[i,9]))
if(sum==equals) {
print(c(i,j))
}
}
}
但是这需要的时间太长了,所以我试图消除消费eval(parse(..
任何帮助的时间将非常感激。谢谢!
房地美
请更新您的问题,使其更易于阅读。 –
将所有数字保留在9列中,然后使用类似“+(2,3)”的方式播放。无法正确格式化,用backtics包装+符号。 – zx8754
我同意@ zx8754,当你构造你的字符串时,你基本上是解析。避免这种情况,无需解析。如果你需要更多的帮助,你应该创建一个更小的例子。运行你的代码需要很长时间。 – Roland