Я пытаюсь создать формулу, используя несколько математических разделителей для нечислового аргумента в кадре данных.
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
, так как некоторые строки имеют разное количество аргументов.