Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有类似于MATLAB的函数';s是R的成员吗?_R_Matlab_Function - Fatal编程技术网

是否有类似于MATLAB的函数';s是R的成员吗?

是否有类似于MATLAB的函数';s是R的成员吗?,r,matlab,function,R,Matlab,Function,如果我想要一个逻辑数组和数组元素是集合数组成员的位置索引,R中是否有一个函数可以给出与MATLAB的ismember()类似的输出 Matlab代码: A = [5 3 4 2]; B = [2 4 4 4 6 8]; [la loc] = ismember(A,B) A = [5 3 4 2]; B = [2 4 4 4 6 8]; [la,loc] = ismember(A,B); 输出: la = 1x4 logical array 0 0 1 1 loc

如果我想要一个逻辑数组和数组元素是集合数组成员的位置索引,R中是否有一个函数可以给出与MATLAB的
ismember()
类似的输出

Matlab代码:

A = [5 3 4 2]; 
B = [2 4 4 4 6 8]; 
[la loc] = ismember(A,B) 
A = [5 3 4 2]; 
B = [2 4 4 4 6 8];

[la,loc] = ismember(A,B);
输出:

la = 1x4 logical array
   0   0   1   1

loc = 

     0     0     2     1
     out  
[1,]   0 0
[2,]   0 0
[3,]   2 1
[4,]   1 1
现在,为了在R中获得类似的输出,我使用以下方法:

ismember <- function(A,B){

        out <- match(A,B)
        out <- cbind(out,(A %in% B)*1)
        out[is.na(out)] <- 0

}

ismember(A,B)

Matlab函数ismember可以转换为R:

  • is.element
  • %in%
因此:

ismember(A,B) ---> is.element(A, B)
ismember(A,B) ---> A %in% B
如果要包括索引,可以使用:

总之,您的Matlab代码:

A = [5 3 4 2]; 
B = [2 4 4 4 6 8]; 
[la loc] = ismember(A,B) 
A = [5 3 4 2]; 
B = [2 4 4 4 6 8];

[la,loc] = ismember(A,B);
基本上可以翻译为:

A <- c(5,3,4,2)
B <- c(2,4,4,4,6,8)

la <- is.element(A, B)
loc <- match(A, B, nomatch = 0)

A请更详细地说明预期输出是什么它可以这样写为一行:
cbind(A%in%B,match(A,B,nomatch=0))
is.element
‍‍‍‍‍‍ ‍‍
res <- cbind.data.frame(la = is.element(A, B), loc = match(A, B, nomatch = 0))

print(res$la)
   [1] FALSE FALSE  TRUE  TRUE

print(res$loc)
   [1] 0 0 2 1