Не ясно, насколько «универсален» ваш «единый закон». Похоже, что вы хотите разделить элементы в полиномиальном выражении. Предполагая это и предполагая, что все остальное в простой функции не имеет значения, это будет работать в качестве отправной точки:
objFun=function(x) return(x^2+x+1)
objFun
functionElements <- function(fn) {
# Regular expression of the function body
# Remove anything ahead of an open parenthesis (
# Remove anything after a close parenthesis )
# split on the 4 main arithmetic functions, +, -, * and /
# double backslash means "match the next character exactly", since +, *, -, / have regular expression meanings
# | means "or"
splitElements <- strsplit(split = ".*\\(|\\+|\\*| |\\).*|\\/|\\-", deparse(body(fn)))[[1]]
# remove empty parts ('non zero character')
splitElements <- splitElements[nzchar(splitElements)]
splitElements
}
functionElements(objFun)
Непонятно, как вы хотели, чтобы переменная tmp
была, но из вышесказанного вы можете изменить, чтобы получить то, что вы хотите.