我在一个问题上呆了几个小时。如果您有任何解决办法的想法,非常感谢。
因此,我正在尝试学习如何编写一个函数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)
}
答案 0 :(得分:0)
您可以使用以下内容:
f <- function(vec, int){
if(all(vec != int)) return(NA)
for(i in vec){
if(i == int) return(which(vec == i))
}
}
然后您可以通过以下方法检查其是否有效:
vect <- sample(1:10, 1000, replace = T)
inte <- 10
f(vect, inte)
答案 1 :(得分:0)
您所描述的本质上是which
已经完成的工作。唯一的区别是,在没有命中的情况下,which
会返回integer(0)
(即一个空向量),而不是NA
。
因此,您需要在f
中调用which
并“修复”结果:
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_
}