Как перемешать части функции, представленной в виде суммы в R? - PullRequest
0 голосов
/ 01 мая 2019

Если у меня есть какая-либо числовая функция в R, такая как:

objFun=function(x) return(x^2+x+1) 

Как я могу перетасовать части любой функции в R, используя единый закон?

Пример:

Части "objFun": x ^ 2 & x & 1.

Сначала мне нужно получить количество компонентов, равное n = 3, затем я должен сохранить x ^2 & x & 1 в таблице с размером = 3.

После этого я могу хранить эти детали в переменной tmp, такой как:

if (uniform law return 1 ) then : tmp= x^2
if (uniform law return 2 ) then : tmp= x
if (uniform law return 3)  then : tmp= 1

Я не попробовалпотому что я не знаю, как разделить числовую функцию в R.

1 Ответ

0 голосов
/ 01 мая 2019

Не ясно, насколько «универсален» ваш «единый закон». Похоже, что вы хотите разделить элементы в полиномиальном выражении. Предполагая это и предполагая, что все остальное в простой функции не имеет значения, это будет работать в качестве отправной точки:

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 была, но из вышесказанного вы можете изменить, чтобы получить то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...