Dason का दृष्टिकोण शांत है, लेकिन अगर मनुष्यों द्वारा अधिक पठनीय कुछ चाहते हैं, इस का उपयोग करें:
`%&%` <- function(e1, e2) ifelse(is.na(e1)|is.na(e2), NA, e1 & e2)
परिणाम:
> x <- c(TRUE, FALSE, NA)
> outer(x, x, `%&%`)
[,1] [,2] [,3]
[1,] TRUE FALSE NA
[2,] FALSE FALSE NA
[3,] NA NA NA
संपादित करें: बेंचमार्किंग:
यह चाहिए ध्यान दें कि डेसन का दृष्टिकोण सबसे तेज़ है, जैसा कि नीचे दिखाया गया है:
library(microbenchmark)
library(compiler)
x <- sample(c(TRUE, FALSE, NA), size=1e3, TRUE)
y <- sample(c(TRUE, FALSE, NA), size=1e3, TRUE)
`%&1%` <- function(e1, e2) ifelse(is.na(e1)|is.na(e2), NA, e1 & e2)
`%&2%` <- function(x, y) (!x | y) & (x | y) & (x | !y)
`%and%` <- function(x, y)as.logical(x*y)
नोट: %&2%
एक अजीब विकल्प मैं सिर्फ भाग्य से मिला है :-)
है की यह सब क्या हो संकलन को देखने के लिए करते हैं:
`%C&2%` <- cmpfun(`%&2%`)
`%C&1%` <- cmpfun(`%&1%`)
`%Cand%` <- cmpfun(`%and%`)
> microbenchmark(x %&1% y, x %&2% y, x %and% y, x %C&1% y, x %C&2% y, x %Cand% y, times=1000)
Unit: microseconds
expr min lq median uq max neval
x %&1% y 201.575 206.124 208.574 211.024 1822.917 1000
x %&2% y 86.439 87.140 87.839 88.190 1244.441 1000
x %and% y 13.299 13.999 14.349 14.700 1141.905 1000
x %C&1% y 200.525 205.775 208.574 210.674 1554.151 1000
x %C&2% y 84.690 85.390 86.090 86.440 1212.596 1000
x %Cand% y 13.299 13.649 14.349 14.699 1141.555 1000
अजीब बात है, संकलक परिवर्तन नहीं होता है यहाँ कुछ भी!
इसे वास्तविक आर वाक्यविन्यास में रखना उपयोगी होगा, इसलिए यह स्पष्ट है कि आप क्या पूछ रहे हैं। – Thomas
आप 'any' ...' xx <- c (1,2,3, NA, 4,5) आज़मा सकते हैं; कोई भी (is.na (xx)) ' – Arun
@ अरुण 'कोई भी'' '' और '|' का विस्तार है, वास्तव में हॉफमैन चाहता है जिस तरह से काम करता है। '&' का विस्तार 'सभी 'है और इसका एक ही मुद्दा – Dason