que je cherchais depuis un certain temps, mais il semble la réponse semble toujours être à utiliser eval(parse(text="1+1"))
.Comment calculer « 1 + 1 » sans utiliser eval (parse (...?
J'ai une colonne dans mon cadre de données, il a une liste de chaînes telles que "1 + 1 * 6", "1 * 4/3" etc. Je souhaite les calculer dans une nouvelle colonne sans utiliser les fonctions eval(parse(
que je cherche à faire il plus de 8 millions de lignes
il est fondamentalement une tentative de répondre à la question:. Compte tenu des chiffres 1:9
trouver toutes les solutions où (A_B_C)/(D_E_F) = GHI
, où A:I
sont les numéros 1:9
(sans répéter) et e Les underscores sont l'un des quatre opérateurs *, /, +,-
, également sans répétition.
J'ai créé une base de données avec toutes les permutations de 1:9
et pour chacun de ceux-ci j'ai calculé les permutations des quatre opérateurs.
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))
}
}
}
Cependant, cela prend beaucoup trop de temps, d'où je suis en train de supprimer le temps eval(parse(..
Toute aide serait vraiment apprécié. Merci!
Freddie
S'il vous plaît mettre à jour votre question et de le rendre plus facile à lire. –
Conservez tous les numéros dans la colonne 9, puis jouez avec quelque chose comme ceci "+ (2, 3)". Impossible de formater correctement, envelopper le signe + avec backtics. – zx8754
Je suis d'accord avec @ zx8754, vous êtes fondamentalement deparsing lorsque vous construisez vos chaînes. Évitez cela et il n'y a pas besoin d'analyser. Si vous voulez plus d'aide, vous devriez créer un exemple plus petit. L'exécution de votre code prend trop de temps. – Roland