Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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
R 查找给定元素的索引,如果给定元素未出现,则查找NA_R_Function - Fatal编程技术网

R 查找给定元素的索引,如果给定元素未出现,则查找NA

R 查找给定元素的索引,如果给定元素未出现,则查找NA,r,function,R,Function,我在一个问题上被困了好几个小时。如果你们有谁知道如何解决这个问题,非常感谢 所以我试图学习如何编写一个函数f,它接受一个输入(数字)向量“vec”和一个整数“int” 基本上,函数应该返回“int”在“vec”中出现的位置,如果“int”在“vec”中没有出现,那么函数应该返回“NA” 所有这些都是通过使用循环“for”实现的 最后,输出 sapply(1:4, function(x) print(f3(c(3, 3, 3, 2, 2, 1), x))) is # ``` # [1

我在一个问题上被困了好几个小时。如果你们有谁知道如何解决这个问题,非常感谢

所以我试图学习如何编写一个函数f,它接受一个输入(数字)向量“vec”和一个整数“int”

基本上,函数应该返回“int”在“vec”中出现的位置,如果“int”在“vec”中没有出现,那么函数应该返回“NA”

所有这些都是通过使用循环“for”实现的

最后,输出

sapply(1:4, function(x) print(f3(c(3, 3, 3, 2, 2, 1), x))) is

#    ```
#    [1] 6
#    [1] 4 5
#    [1] 1 2 3
#    NULL
这是我的代码,但我被困在这里,看不到问题的解决方案

    f <- function(vec, int) {
  for (i in vec) 
    check <- vec[]== int 
  which(int == vec)
}

f您可以使用以下内容:

f <- function(vec, int){
  if(all(vec != int)) return(NA)
  
  for(i in vec){
    if(i == int) return(which(vec == i))
  }
}

f您所描述的本质上是
已经做过的事情。唯一的区别是
,它在没有命中的情况下返回
整数(0)
(即空向量),而不是
NA

因此,在
f
中,您只需调用
,然后“修复”结果:

f = function (vec, x) {
    result = which(vec, x)
    if (length(result) == 0L) NA_integer_ else result
}
代码
if(length(…)==0L)èA›elseèB›
是一种常见的模式,人们通常为其定义一个特定的运算符:

`%||%` = function (a, b) {
    if (length(a) == 0L) b else a
}
使用该功能,您可以大大简化
f
(以及类似的功能):

f = function (vec, x) {
    which(vec, x) %||% NA_integer_
}

编写的代码没有任何意义:你在
vec
上循环,但你总是在循环的第一次迭代中返回,所以循环什么也不做(除了在
vec
为空时被完全跳过)。很好,我真的好几个小时都看不到问题的解决方案。非常感谢你的帮助(:@Konrad对代码的看法是正确的。我刚刚更正了它。修复程序改进了一些东西,但我仍然认为代码没有任何意义。它不就是做了与
相同的事情吗(vec==int)
,除了返回
NA
而不是
整数(0
当没有命中时?for
循环只是多余的。@KonradRudolph,是的,正如你所说的
for
循环没有多大意义。但是,最初的问题要求它。
f = function (vec, x) {
    which(vec, x) %||% NA_integer_
}