在R
中,不能有意义地比较不同长度的载体,即
x = 1:10
y = 7:12
x >= y
发出警告,y
短于x
。我想对x
到y
的每个元素进行比较,并保存或转换结果向量,如
v = numeric()
for(i in 1:length(x)){
v[i] = sum( x[i] >= y )
}
此操作很慢 - 是否有直接的方式来到这里?另外,sum
考虑将i
保存在矩阵v[i,]
的行中。
答案 0 :(得分:2)
我们可以使用outer
和rowSums
rowSums(outer(x, y, FUN= '>='))
#[1] 0 0 0 0 0 0 1 2 3 4
或另一个选项是使用sapply
循环,然后获取逻辑矩阵的colSums
colSums(sapply(x, '>=', y))
#[1] 0 0 0 0 0 0 1 2 3 4
我们还可以翻译for
Rcpp
循环
#include <Rcpp.h>
using namespace Rcpp;
using namespace std;
//[[Rcpp::export]]
NumericVector getSum(NumericVector v1, NumericVector v2) {
NumericVector v(v1.size());
for(int i = 0; i <= v1.size(); i++) {
v[i] = sum(v1[i] >= v2 );
}
return(v);
}
- 来自R控制台
library(Rcpp)
sourceCpp("rcppTrial.cpp")
getSum(x, y)
#[1] 0 0 0 0 0 0 1 2 3 4