2012-10-04 60 views
25

我試圖做這個簡單的搜索,但在R中的百分號(%)符號上找不到任何內容.在以下代碼中的含義是什麼?R中的%op%運算符的意思是什麼?例如「%in%」

time(x) %in% time(y) 

xy是矩陣。

如何查找%in%%stuff%模式後面的類似函數的幫助,因爲我無法找到幫助文件?

相關問題:
What does eg %+% do? in R
The R %*% operator
What does %*% mean in R
https://stackoverflow.com/questions/23091654/what-does-it-mean-when-something-is-between-two-percent-signs-in-r
What does %||% do in R?
What does %>% mean in R

+1

參見http://stackoverflow.com/questions/1328903/what-does- EG-DO-在-R?rq = 1 –

回答

19

周圍用引號找到幫助頁面。無論這些工作

> help("%in%") 
> ?"%in%" 

一旦你得到的幫助頁面,你會看到

'在%%' 當前被定義爲

「< 「中%%」 - 功能(X,表)匹配(X,表,NOMATCH = 0)> 0'


由於time是一個通用的,我不知道什麼time(X2)返回不知道什麼X2是。但是,%in%會告訴您左側的哪些項目也位於右側。

> c(1:5) %in% c(3:8) 
[1] FALSE FALSE TRUE TRUE TRUE 

也參見,intersect

> intersect(c(1:5), c(3:8)) 
[1] 3 4 5 
+0

那麼:哪個(時間(X2)的%時間(Y))基本上返回X2和Y之間的較大日期?感謝兩個答案 –

+1

不。請參見'?「%in%」';-) – GSee

2

%in%是用於查找和子集的矩陣或數據幀相同的名稱或值的多次出現的操作者。

例如1:具有相同名稱的子集

set.seed(133) 
x <- runif(5) 
names(x) <- letters[1:5] 
x[c("a", "d")] 
# a   d 
# 0.5360112 0.4231022 

現在你改變的「d」的名稱爲「A」

names(x)[4] <- "a" 

如果您嘗試提取相似的名稱和它的使用之前的下標值,它將不起作用。注意結果,它沒有[1]和[4]的元素。

x[c("a", "a")] 

#  a   a 
# 0.5360112 0.5360112 

所以,你可以通過使用%in%二進制運算符提取的變量不同位置的兩個「一」 S。

names(x) %in% "a" 
# [1] TRUE FALSE FALSE TRUE FALSE 

#assign it to a variable called "vec" 
vec <- names(x) %in% "a" 

#extract the values of two "a"s 
x[vec] 
#   a   a 
# 0.5360112 0.4231022 

實施例2:從列 子集的多個值參考this site爲例

18

更一般地,%foo%爲二進制運算符的語法。 R中的二元運算符實際上只是僞裝的函數,並且帶有兩個參數(前一個和後一個運算符成爲該函數的前兩個參數)。

例如:

> `%in%`(1:5,4:6) 
[1] FALSE FALSE FALSE TRUE TRUE 

雖然%in%在基礎R的定義,你也可以定義你自己的二元函數:

`%hi%` <- function(x,y) cat(x,y,"\n") 
> "oh" %hi% "my" 
oh my 
+0

另一個這樣的用戶定義的二元運算符是執行真矩陣乘法的%*%,而運算符*只是矢量化的數據計算。 – Sathish

+1

@Sathish注意到,儘管我會調用%*%,%等%「非用戶定義」或「內置」運算符。 –

+0

儘管理解評分較高的答案,但這個答案的這個直截了當的意外有幫助 – Coruscate5

37

我沒想到GSEE的或Sathish所在的答案遠遠不夠因爲「%」確實本身具有意義,而不僅僅是在%in%運算符的上下文中。這是用戶定義新的中綴操作符的機制。這是一個比%in%中綴運算符或其更一般前綴祖先match的優點更爲普遍的問題。它可以像製作(s)的運營商

`%s%` <- function(x,y) x + y 

或者它可能是更有趣的UM簡單,說做的二階導數運算符:

`%DD%` <- function(expr, nam="x") { D(D(bquote(.(expr)), nam), nam) } 
expression(x^4) %DD% "x" 
# 4 * (3 * x^2) 

%字符數限制也有重要性解析日期,日期時間和C型格式函數,如strptime,formatCsprintf

由於這是最初編寫的,我們已經看到magrittr包的出現,dplyr詳細說明證明了% -flanked操作符的另一種用法。

所以最一般的答案是%符號是由R解析器專門處理的。由於解析器用於處理plotmath表達式,因此您還將在?plotmath幫助頁面上看到用於圖形註釋的大量選項。

12

%標誌不是在R(你可以看到那些?Reserved幫助頁面的列表。)相反,%表示infixbinary operator關鍵字。有幾個內置運營商使用%,您也可以創建自己的。


我如何在二元運算符的幫助?

與任何不是標準變量名稱的東西一樣,必須將該術語用引號或反引號括起來。

?"%in%" 
?`%in%`  

Credit:GSee's answer


是什麼%in%辦?

作爲?`%in%`幫助頁面上描述(這實際上是因爲%in%?match幫助頁面實際上只是的match中綴版本。),

[%in%]返回一個邏輯矢量指示是否存在其左操作數是否匹配

它最常用於分類變量,儘管它也可以與數字一起使用。

c("a", "A") %in% letters 
## [1] TRUE FALSE 

1:4 %in% c(2, 3, 5, 7, 11) 
## [1] FALSE TRUE TRUE FALSE 

來源:GSee's answerAri's answerSathish's answer


如何創建自己的中綴二元運算符?

這些是函數,可以用與其他函數相同的方式定義,但有一些限制。

  1. 這是一個二進制算子的,所以函數必須只能接受兩個參數。
  2. 由於該名稱不符合標準,因此必須使用引號或反引號進行書寫。

例如,這定義了矩陣冪運算符。

`%^%` <- function(x, y) 
{ 
    matrixcalc::matrix.power(x, y) 
} 
matrix(1:4, 2) %^% 3 

來源:BondedDust's answerAri's answer


%運營商有什麼其他的呢?

基R:

%/%%%分別執行integer divisionmodular division,並且?Arithmetic幫助頁面上的描述。

%o%給出了陣列的outer product

%*%執行matrix multiplication

%x%執行陣列的Kronecker product

ggplot2

%+%替換一個ggplot數據幀。

%+replace%修改ggplot中的主題元素。

%inside%(內部)檢查範圍內的值。

%||%(內部)在NULL值的情況下提供默認值。這個函數也出現在devtools,reshape2,roxygen2和knitr內部。 (在knitr它被稱爲%n%。)

magrittr

%>%管道左手側進入在右手側的表達式。

%<>%將左側導入到右側的表達式中,然後將結果分配回左側對象。

%T>%將左手插入右側的表達式,僅用於其副作用,返回左側。

%,%構建功能序列。

%$%公開暴露data.frame的列或列表的成員。

data.table:

%between%檢查在一個範圍內的值。

%chin%就像%in%,爲字符向量進行了優化。

%like%檢查正則表達式匹配。

Hmisc:

%nin%返回%in%相反。

devtools

%:::%(內部)從作爲字符串傳遞一個命名空間得到的變量。

sp

%over%執行空間加入

畫謎(例如,其多邊形對應於某些點):

%R%一個regex對象的符連接元件。


更一般地,你可以使用查找計算機上安裝的所有軟件包的所有運營商:

library(magrittr) 

ip <- installed.packages() %>% rownames 
(ops <- setNames(ip, ip) %>% 
    lapply(
    function(pkg) 
    { 
     rdx_file <- system.file("R", paste0(pkg, ".rdx"), package = pkg) 
     if(file.exists(rdx_file)) 
     { 
     rdx <- readRDS(rdx_file) 
     fn_names <- names(rdx$variables) 
     fn_names[grepl("^%", fn_names)] 
     } 
    } 
) %>% 
    unlist 
)