Как мне создать pairlist с пустыми элементами в R? - PullRequest
3 голосов
/ 23 декабря 2011

В R, когда я делаю

substitute(function(a) { a })[[2]]

, я вижу следующий pairlist:

$a

Обратите внимание, что значение элемента пусто.Как я могу создать такой паирлист?Следующее не работает для меня:

> pairlist(a="")
$a
[1] ""

Я спрашиваю это в контексте программного создания функции.Я хочу сделать что-то вроде

> call("function", pairlist(a=""), call("{", as.symbol("a")))
function(a = "") {
    a
}

Это довольно близко к тому, что я получаю, делая

> substitute(function(a){a})
function(a) {
    a
}

за исключением части аргумента функции.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

попробуйте это:

> as.pairlist(alist(a=))
$a

Возможно, вы хотите сделать следующее:

> f2 <- as.function(alist(a=1,b=,{a+b}))
> f2
function (a = 1, b) 
{
    a + b
}
0 голосов
/ 23 декабря 2011

С alist(a=).

Функции formals и body также могут оказаться полезными при программном создании функции, а не substitute и call. Вот пример из документации ?formals

f <- function(x) a+b
formals(f) <- alist(a=,b=3) # function(a,b=3)a+b
f(2) # result = 5

который может быть расширен таким образом

body(f) <- expression(2*a+b)
f(2) # result = 7
...