有没有一种简单的方法来获取向量的最后一个匹配的索引?
else
{
$add_lakas="insert into lakas (Terulet,Ar,Varos,Cim,Tipus1,Tipus2,Erkely,Lift,Emelet,SzobaNum)
values ('$Terulet','$Ar','$Varos','$Cim','$Tipus1','$Tipus2','$Erkely','$Lift','$Emelet','$SzobaNum')";
$run_lakas = mysql_query($add_lakas);
mysql_free_result($run_lakas);
$add_elado="insert into elado (Nev,Kor,telefon) values ('$Nev','$Kor','$telefon')";
$run_elado = mysql_query($add_elado);
mysql_free_result($run_elado);
$add_eladas="insert into eladas (Tulajdonos_telefon) values ('$telefon')";
$run_eladas = mysql_query($add_eladas);
if($run_eladas )
{
echo "<script>alert('upload done!')</script>";
echo "<script>window.open('Add.php','_self')</script>";
}
mysql_free_result($run_eladas);
}
}
?>
目标:3
答案 0 :(得分:7)
另一种简单的方法是在max
元素的索引上使用TRUE
。
x <- c(TRUE,FALSE,TRUE,FALSE,FALSE)
max(which(x))
#[1] 3
答案 1 :(得分:6)
?Position
参数时, right=TRUE
就是出于这种情况。以下所有内容应基本相同。
Position(I, x, right=TRUE)
#[1] 3
Position(identity, x, right=TRUE)
#[1] 3
Position(isTRUE, x, right=TRUE)
#[1] 3
Position(function(x) x, x, right=TRUE)
#[1] 3
答案 2 :(得分:2)
如果我们要与单个元素进行比较,我们可以使用==
tail(which(v1 == TRUE),1)
#[1] 3
==
部分不是必需的,因为矢量是逻辑
tail(which(v1),1)
#[1] 3
注意:这里我假设OP的向量可能不总是TRUE / FALSE值,如示例中所示。
如果我们需要使用match
,则会提到一个选项here
v1 <- c(TRUE,FALSE,TRUE,FALSE,FALSE)
答案 3 :(得分:1)
如果考虑性能,那么我发现这样做的最好方法是
length(x) + 1L - match(TRUE, rev(x))
这明显更快,特别是在一般情况下,人们希望最多匹配一个以上的条目。
MatchLast <- function (needles, haystack) # This approach
length(haystack) + 1L - match(needles, rev(haystack))
MaxWhich <- function (needles, haystack) # Ronak Shah's approach
vapply(needles, function (needle) max(which(haystack==needle)), integer(1))
Pos <- function (needles, haystack) # thelatemail's suggestion
vapply(needles, function (needle)
Position(function (x) x == needle, haystack, right=TRUE),
integer(1))
Tail <- function (needles, haystack) # akrun's solution
vapply(needles, function (needle) tail(which(haystack==needle), 1), integer(1))
使用Rilkon42的数据:
x <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
microbenchmark(MatchLast(TRUE, x), MaxWhich(TRUE, x), Pos(TRUE, x), Tail(TRUE, x))
## function min lq mean median uq max
## MatchLast 10.730 19.1270 175.3851 23.7920 28.458 14757.131
## MaxWhich 11.663 22.1600 275.4657 25.1920 28.224 24355.120
## Pos 25.192 47.5845 194.1296 52.7160 64.612 12890.622
## Tail 39.187 69.7435 223.1278 83.0395 101.233 9223.848
在更一般的情况下:
needles <- 24:45
haystack <- c(45, 45, 44, 44, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 38, 38, 37, 37,
36, 36, 35, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 28, 28,
27, 27, 26, 26, 25, 25, 24, 24)
microbenchmark(MatchLast(needles, haystack), MaxWhich(needles, haystack),
Pos(needles, haystack), Tail(needles, haystack))
## function min lq mean median uq max
## MatchLast 15.395 30.3240 137.3086 36.8550 48.051 9842.441
## MaxWhich 90.971 102.1665 161.1100 172.3765 214.829 238.854
## Pos 709.563 733.8220 1111.7000 1162.7780 1507.530 1645.383
## Tail 654.981 690.2035 1017.7400 882.6385 1404.197 1595.933