2016-09-22 3 views
0

Я создаю пакет R, и я хотел бы положиться на пакет falsy, который недавно был archived от CRAN.Включите архивный пакет CRAN в пакете

С неархивированным пакетом обычно можно добавить имя пакета в список Imports в файле DESCRIPTION. Как импортировать пакет, который был заархивирован CRAN?

Примечание: после контакта с Gábor, кажется, причина, по которой архивируется фальшь, связана с потенциально опасным inconsistencies между родным и falsy понятиями ложности. Он не планирует разблокировать пакет.

+0

[This] (http://stackoverflow.com/a/32533483/324364) может быть ответ, который вы ищете ...? – joran

+0

Это определенно решение, хотя идеальное решение не потребует каких-либо действий со стороны конечного пользователя. – user12341234

+0

В комментариях к этому вопросу также обсуждается возможность создания собственного ** drat ** repo на github, что может быть более полезным для вас, но, вероятно, меньше для пользователей. – joran

ответ

0

Это:

FALSY <- FALSE 

TRUTHY <- TRUE 

is_falsy <- function(object) { 
    is.null(object) || 
    identical(object, FALSE) || 
    identical(object, 0L) || 
    identical(object, 0.0) || 
    identical(object, 0+0i) || 
    identical(object, "") || 
    identical(object, as.raw(0)) || 
    identical(object, logical()) || 
    identical(object, integer()) || 
    identical(object, double()) || 
    identical(object, complex()) || 
    identical(object, character()) || 
    identical(object, raw()) || 
    identical(object, list()) || 
    inherits(object, "try-error") 
} 

is_truthy <- function(object) { 
    ! is_falsy(object) 
} 

`%&&%` <- function(lhs, rhs) { 
    lres <- withVisible(eval(lhs, envir = parent.frame())) 
    if (is_truthy(lres$value)) { 
    eval(rhs, envir = parent.frame()) 
    } else { 
    if (lres$visible) { lres$value } else { invisible(lres$value) } 
    } 
} 

nay <- function(rhs) { 
    if (is_falsy(rhs)) { TRUTHY } else { FALSY } 
} 

try_quietly <- function(expr) { 
    try(expr, silent = TRUE) 
} 

является всей степенью (минус roxygen комментариев) пакета. Почему бы просто не включить его в свой пакет?

В противном случае, возможно, спросите у Габора, планирует ли он переиздать его в CRAN или если вы можете взять на себя обслуживание?

+0

Я связался с Габором, ожидая ответа. Я не решаюсь копировать источник напрямую, потому что считаю, что дублирование кода по своей сути плохое. – user12341234

+0

Это ** значительно ** лучше, чем полагаться на архивированный пакет. – hrbrmstr

+0

Интересно. Каковы ваши причины говорить об этом? – user12341234