我的目标是计算向量从正值变为负值的次数,反之亦然。我会将其保存在'更改'例如。 E.g。
randomvector <- c(0, 3, 2, -1, -4, -1, 2, 5, 8, 6, 3, 1, -2, -1, 1, 0, 3)
在这种情况下,&#39;更改&#39;将是4,(2后跟-1,-1后跟2,1,后跟-2,-1后跟1)
这是我到目前为止所做的。
Point1 <- c(1:16)
Point2 <- c(2:17)
Number = 0
if(randomvector[Point1] >0 & randomvector[Point2]) {
Number = Number + 1
}
Number
基本上,我的代码是这样说的:如果randomvector的第一个值是&gt; 0,并且randomvector的第二个值是&lt; 0,则将数字1添加到&#39;数字&#39;。 &#39;编号&#39;用作计数来跟踪发生这种情况的次数。向量Point1和Point 2从1和2开始,分别转到16和17,因为我希望if语句在向量randomvector中的每个连续数字对中移动。
这就是我得到的:
Warning messages:
1: In if (randomvector[Point1] > 0 & randomvector[Point2]) { :
the condition has length > 1 and only the first element will be used
> Number
[1] 0
我理解0的输出,因为代码在遇到if语句中的错误后没有运行。我也理解错误,即if语句不适用于矢量化对象。我不确定如何攻击这个,或者我是否使用最好的方法。如果我没有,请使用完全错误的方法随时告诉我。
谢谢!
答案 0 :(得分:5)
一种方法是测试连续值sum(abs(diff(sign(randomvector))) == 2)
# 4
的绝对差值何时为2
sign(randomvector)
# [1] 0 1 1 -1 -1 -1 1 1 1 1 1 1 -1 -1 1 0 1
因为
diff(sign(randomvector))
# [1] 1 0 -2 0 0 2 0 0 0 0 0 -2 0 2 -1 1
和
A few minor tweaks and help from Dave resolved my issue :D
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%=orderSearch.objectId %></p>
</body>
</html>
var express = require('express');
var router = express.Router();
var mongodb = require('mongodb');
var mongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/WishList';
//http://localhost:3000/buyersearch?buyerID=2447
//buyerIDSearch
router.get('/', function (req, res) {
var buyerID = req.query.buyerID;
if (!buyerID || !parseInt(buyerID)) {
res.render('error', {message: "Please enter an Buyer Identification Number", error: {status: "", stack: ""}});
} else {
mongoClient.connect(url, function (err, db) {
if (err) {
res.render('error', {message: "Failed to connect", error: {status: "", stack: ""}});
} else {
var WishListDB = db.collection('orders');
WishListDB.find({"buyerID": parseInt(buyerID)}).toArray(function (err, result) {
if (err || !result || result.length == 0) {
res.render('error', {
message: "No order found with that ID number",
error: {status: "", stack: ""}
});
} else {
res.render('buyerSearch', {
buyerSearch: result[0],
buyerID: result[0]
})
}
});
}
})
}
});
module.exports = router;
答案 1 :(得分:3)
randomvector <- c(0, 3, 2, -1, -4, -1, 2, 5, 8, 6, 3, 1, -2, -1, 1, 0, 3)
TestVec = randomvector[-1] * randomvector[-length(randomvector)]
which(TestVec <0) +1
答案 2 :(得分:1)
另一种方法是使用rle
。忽略0
个数字,找出值变化的次数。
length(rle(sign(randomvector[randomvector!=0]))$lengths) - 1
#[1] 4