रूप @DirkEddelbuettel बताया गया है, आपको लगता है कि जिस तरह से NA
परीक्षण नहीं कर सकते। लेकिन आप कर सकते हैं match
NA
वापस नहीं:
nomatch=0
का उपयोग करने और if
खंड पीछे (के बाद से 0
FALSE
के रूप में व्यवहार किया जाता है) के द्वारा, कोड को सरल बनाया जा सकता है। इसके अलावा, एक और उपयोगी कोडिंग मुहावरा
तो मैं इसे इस तरह लिखना चाहते हैं, तो खंड, इस तरह आप शाखाओं में से एक में चर नाम गलत टाइप नहीं होगा का परिणाम आवंटित करने के लिए है ...:
observed <- if(match('SubjResponse',names(data), nomatch=0)) {
data$SubjResponse # match found
} else {
data$SubjResponse1 # no match found
}
तरह से यदि आप "अक्सर" अगर-नहीं, तो आप दो चीजों के बारे में पता होना चाहिए साथ कोई समस्या है द्वारा:
परीक्षण करने के लिए वस्तु एनए या NaN, शामिल नहीं करना चाहिए या होना एक स्ट्रिंग (मोड कैरेक्टर) या कुछ अन्य प्रकार जिन्हें लॉजिकल वैल्यू में नहीं जोड़ा जा सकता है। संख्यात्मक ठीक है: 0 FALSE
कुछ और है (लेकिन NA/NaN) TRUE
है।
वस्तु की लंबाई वास्तव में 1 (एक अदिश मूल्य) होना चाहिए। यह लंबा हो सकता है, लेकिन फिर आपको एक चेतावनी मिलती है। यदि यह छोटा है, तो आपको एक त्रुटि मिलती है।
उदाहरण:
len3 <- 1:3
if(len3) 'foo' # WARNING: the condition has length > 1 and only the first element will be used
len0 <- numeric(0)
if(len0) 'foo' # ERROR: argument is of length zero
badVec1 <- NA
if(badVec1) 'foo' # ERROR: missing value where TRUE/FALSE needed
badVec2 <- 'Hello'
if(badVec2) 'foo' # ERROR: argument is not interpretable as logical
'match' * हमेशा * पहला तर्क (' x') के रूप में ही लंबाई का एक वेक्टर वापस आ जाएगी। तो इस मामले में, हमेशा एक स्केलर मूल्य। – Tommy
'आर इन्फर्नो' के सर्किल 8.1.4 http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –