Я ищу для создания функции в R, которая загружает значения по умолчанию для данной функции. Для этого я использую аргумент args
для функции и хочу разбить ее на аргументы функции по умолчанию и загрузить их в глобальную среду. Это требует немного регулярных выражений и натолкнулось на это, с которыми мне трудно справляться.Регулярное выражение Выберите запятую, но не внутри между скобками
Вот пример функции:
myFunc <- function(a = 1, b = "hello world", c = c("Hello", "World")) {}
Я получил его до этой точки, используя свои собственные функции:
x <- "a = 1, b = \"hello world\", c = c(\"Hello\", \"World\")"
Однако, когда я борюсь на разделив аргументы функции вверх. Я хотел разбить запятую, но если у вас есть аргумент функции, который имеет запятую в пределах значения по умолчанию (например, аргумент), это вызывает проблемы. Я думаю, что если есть способ вызвать регулярное выражение, соответствующее запятой, но не запятую между двумя круглыми скобками, то я мог бы использовать strsplit
с этим выражением, чтобы получить то, что я хочу.
Моя попытка соответствовать случай запятой между двумя скобками выглядит следующим образом:
\\(.*,.*\\)
Теперь, я посмотрел в том, чтобы делать то, что я описал выше, и кажется отрицательным прогностическим может быть тем, что мне нужно, поэтому я попытался сделать что-то подобное.
splitx <- strsplit(x, "(?!\\(.*,.*\\)(,)")
Но R говорит мне, что это незаконное регулярное выражение. Если я установил в аргументе perl = TRUE
, он просто вернет ту же строку. Любая помощь здесь была бы очень признательна, и я надеюсь, что я был ясен!
С помощью регулярного выражения PCRE легко справиться с чем-то другим - ['strsplit (x," \\ ([^)] + \\) (* SKIP) (* F) |, ", perl = TRUE)'] (http://ideone.com/Cw6U5n). Однако убедитесь, что вы не находитесь в тупике с регулярными выражениями здесь. –
Ваш вопрос имеет гораздо более широкий охват, чем проблема, с которой вы сталкиваетесь. Был бы я кратковременным, если бы я предположил, что 'match.call()' может быстрее привести вас к цели? –
Некоторые поиски найдут более подробную информацию, но вы можете начать здесь: http://stackoverflow.com/questions/14397364/match-call-with-default-arguments –