我的R代碼裏面最終的形式的語句包含過多:替代R中
if (!is.null(aVariable)) {
do whatever
}
但這種說法是很難讀,因爲它包含兩個否定。我寧願是這樣的:!
if (is.defined(aVariable)) {
do whatever
}
這是否確實相反is.null R中存在的is.defined
型功能的標準呢?
歡呼聲, 雅尼克
我的R代碼裏面最終的形式的語句包含過多:替代R中
if (!is.null(aVariable)) {
do whatever
}
但這種說法是很難讀,因爲它包含兩個否定。我寧願是這樣的:!
if (is.defined(aVariable)) {
do whatever
}
這是否確實相反is.null R中存在的is.defined
型功能的標準呢?
歡呼聲, 雅尼克
你可能會更好的工作出了什麼價值鍵入功能或代碼接受,並要求爲:
if (is.integer(aVariable))
{
do whatever
}
這可能是在ISNULL的改進,因爲它提供類型檢查。另一方面,它可能會降低代碼的通用性。
或者,只是讓你想要的功能:伊恩把這個註釋
is.defined = function(x)!is.null(x)
'is.defined'這個名稱不太正確,因爲你可以聲明一個值爲NULL的變量。嘗試,例如'x < - NULL; x'。 'isnt.null'將是該函數更合適的名稱。在perl中至少有一個變量 – 2010-02-02 12:19:48
,如果一個變量的值爲undef,則這個變量被認爲是沒有定義的,這個值就像null。 – 2010-02-02 17:16:43
,但我認爲這是一個很好的答案:
if (exists("aVariable"))
{
do whatever
}
注意變量名稱被引用。
我不認爲這是一樣的。 'exists'測試變量是否被綁定。 'is.null'假定變量被綁定,並測試其內容是否爲NULL對象。它們不可互換。 – Harlan 2010-02-01 22:02:41
如果它只是一個易於閱讀的事情,你總是可以定義自己的功能:
is.not.null <- function(x) ! is.null(x)
所以,你可以用它一直以來你的程序。
is.not.null(3)
is.not.null(NULL)
的shiny
軟件包提供了方便的功能validate()
和need()
用於檢查變量都可用且有效。 need()
評估一個表達式。如果表達式無效,則返回錯誤消息。如果表達式有效,則返回NULL
。可以用它來檢查一個變量是否有效。有關更多信息,請參閱?need
。
我建議定義一個函數是這樣的:
is.valid <- function(x) {
require(shiny)
is.null(need(x, message = FALSE))
}
此功能is.valid()
將返回FALSE
如果x
是FALSE
,NULL
,NA
,NaN
,一個空字符串""
,空原子向量,只含有載體缺失值,僅包含FALSE
的邏輯向量或類try-error
的對象。在所有其他情況下,它返回TRUE
。
這意味着,need()
(和is.valid()
)涵蓋了一個非常廣泛的失敗案例。而是寫:
if (!is.null(x) && !is.na(x) && !is.nan(x)) {
...
}
一個可以簡單的寫:
if (is.valid(x)) {
...
}
隨着支票try-error
類,它甚至可以在配合使用try()
塊默默發現錯誤:(見https://csgillespie.github.io/efficientR/programming.html#communicating-with-the-user)
bad = try(1 + "1", silent = TRUE)
if (is.valid(bad)) {
...
}
aVariable從何而來?它是向量中的元素,是函數的全局或非向量參數?我可能會有更多的建議。 – 2010-02-01 10:44:16
或許'存在'已接近你正在尋找的 – 2010-02-01 17:08:12
請參閱下面有關'存在'的Harlan的評論... – 2010-02-02 11:12:38