Создание формулы с использованием нескольких математических разделителей для нечислового аргумента над фреймом данных - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать формулу, используя несколько математических разделителей для нечислового аргумента в кадре данных.

structure(list(Rate = c("0.4545", "27000000"), R1c = c(1, 1), 
    R1 = c("H2O2", "$OH"), R2c = c(NA, 1), R2 = c(NA, "H2O2"), 
    R3c = c(NA, NA), R3 = c(NA, NA), P1c = c(2, 1), P1 = c("$OH", 
    NA), P2c = c(NA, NA), P2 = c(NA, NA), P3c = c(NA, NA), P3 = c(NA, 
    NA)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", 
"data.frame"))

Я хочу создать базовое выражение:

(Оценить) [(R1 ^ R1c) (R2 ^ R2c) * (R3 ^ Rc)]

применяется для каждой строки. Затем это выражение, созданное для каждой строки, суммируется вместе в символьную строку.

Мне удалось сделать это, когда я просто использовал 1 математический оператор, такой как умножение (Rate * R1 * R1c * R2 * R2c * R3 * Rc)), как показано ниже

Prod <- function(x) paste(sub("(.*(\\-|\\$|\\+|\\_).*)", "`\\1`", na.omit(x)), collapse = "*")
paste(apply(DF], 1, Prod), collapse = " + ")

Есть ли способ создать правильное выражение скорости, если у вас есть более одного оператора (умножение, сложение и экспоненциальное), используя несколько paste аргументов, grepl или do.call с sprintf? Мне не удалось использовать эти функции, в частности sprintf, так как некоторые строки имеют разное количество аргументов.

...