- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要做的或多或少是以下两个线程中讨论的问题的组合:
b_1 <- c(543.4591, 489.36325, 12.03, 896.158, 1002.5698, 301.569)
b_2 <- c(22.12, 53, 12.02, 543.4891, 5666.31, 100.1, 896.131, 489.37)
b_1
中的元素针对
b_2
中的所有元素反之亦然。
element_i
在
b_1
是
不是 等于
任何 号码在
范围
element_j ± 0.045
在
b_2
然后
element_i
必须报告。
element_j
在
b_2
是
不是 等于
任何 号码在
范围
element_i ± 0.045
在
b_1
然后
element_j
必须报告。
### based on threshold = 0.045
in_b1_not_in_b2 <- c(1002.5698, 301.569)
in_b2_not_in_b1 <- c(22.12, 53, 5666.31, 100.1)
最佳答案
一个矢量化的野兽:
D <- abs(outer(b_1, b_2, "-")) > 0.045
in_b1_not_in_b2 <- b_1[rowSums(D) == length(b_2)]
#[1] 1002.570 301.569
in_b2_not_in_b1 <- b_2[colSums(D) == length(b_1)]
#[1] 22.12 53.00 5666.31 100.10
outer
对于长向量:
Matching two very very large vectors with tolerance (fast! but working space sparing) .然而,
outer
的内存瓶颈可以很容易地被阻止杀死。
f <- function (b1, b2, threshold, chunk.size = 5000) {
n1 <- length(b1)
n2 <- length(b2)
chunk.size <- min(chunk.size, n1, n2)
RS <- numeric(n1) ## rowSums, to be accumulated
CS <- numeric(n2) ## colSums, to be accumulated
j <- 0
while (j < n2) {
chunk.size_j <- min(chunk.size, n2 - j)
ind_j <- (j + 1):(j + chunk.size_j)
b2_j <- b2[ind_j]
i <- 0
while (i < n1) {
chunk.size_i <- min(chunk.size, n1 - i)
ind_i <- (i + 1):(i + chunk.size_i)
M <- abs(outer(b1[ind_i], b2_j, "-")) > threshold
RS[ind_i] <- RS[ind_i] + rowSums(M)
CS[ind_j] <- CS[ind_j] + colSums(M)
i <- i + chunk.size_i
}
j <- j + chunk.size_j
}
list(in_b1_not_in_b2 = b1[RS == n2], in_b2_not_in_b1 = b2[CS == n1])
}
outer
永远不会使用比存储两个更多的内存
chunk.size x chunk.size
矩阵。现在让我们做些疯狂的事情。
b1 <- runif(1e+5, 0, 10000)
b2 <- b1 + runif(1e+5, -1, 1)
outer
,我们需要内存来存储两个
1e+5 x 1e+5
矩阵,最大为 149 GB。但是,在我只有 4 GB RAM 的 Sandy Bridge (2011) 笔记本电脑上,计算是可行的。
system.time(oo <- f(b1, b2, 0.045, 5000))
# user system elapsed
#365.800 167.348 533.912
length(b1) x length(b2)
.我们可以将其减少到
length(b1) + length(b2)
如果我们处理排序数组。但是这种深度优化的算法只能用编译语言来实现才能获得效率。
关于r - 两个数字向量上的全对全 setdiff 具有用于接受匹配的数字阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326872/
如果 data.frames 包含列表列,是否有 R 函数可以获取一个 data.frame 中但不在另一个 data.frame 中的行?我知道 dplyr::setdiff 将在常规 data.f
这是setdiff正常行为: x x2 [1] "c" "d" "b" "c" "d" 这将是使用下面建议的表格方法的一种可能结果。使用一些“设置”函数,但这并不是真正的设置问题。似乎更“矢量化”:
如何在 R 中使用 setdiff() 来获取一个向量中但不在其他向量中的元素我的示例如下: dat1 <- c("osa", "bli", "usd", "mnl") dat2 <- c("mnu"
我想要做的或多或少是以下两个线程中讨论的问题的组合: Perform non-pairwise all-to-all comparisons between two unordered charact
我正在尝试使用以下代码获取迄今为止所有工作日的向量: days_of_month = seq(as.Date("2017-01-01"), as.Date("2017-01-31"), by="day
我有两个向量, x vsetdiff(x,y) [1] 3 4 关于r - 如何查找一个向量中不在另一个向量中的元素(不使用 setdiff),我们在Stack Overflow上找到一个类似的问题
我有一个字符向量,我想从中排除存在于第二个向量中的元素。我不知道如何在这种情况下进行否定,同时仍然考虑整个向量 vector[vector ! %in% vector2] 我显然可以做 vector[
在 R 中,是否有一些简单的方法来进行多集(即“袋子”)差异,类似于 setdiff() ,但保留输入向量中的顺序和多重性? 例如,假设 x <- c(1,2,2,3,1,5,4,4,5,3)和 y
我要setdiff连续组之间没有循环,如果可能的话,使用数据表方式或应用系列的功能。 数据框 df : id group 1 L1 1 2 L2 1 3 L1 2
我试图在 R 中找出一种方法来计算两个字符串向量的差异,但仅基于每个字符串中制表符分隔的前 3 列。例如,这是 list1 和 list2 列表 1: "1\t1113200\t111
以下是两个示例数据框: df1 df1 Time1v1 Time2v1 1 55.250 81.0000 2 59.360 12.0000 3 40.260 13.0000 4 786.0
示例数据 v1 v1[!v1 %in% v2] [1] "X2329323" "N23932" "X93201" "X9023111" "O92311" "9000F"
我正在使用 dplyr 将一些数据简单地拆分为训练和测试。 当我做一个简单的例子时,效果很好: a = c(1, 2, 3, 4, 5, 6, 7, 8) b = c("A", "B", "C", "
我正在尝试使用 RcppArmadillo 在 C++ 中编写 R 的 setdiff() 函数的一种模拟。我相当粗糙的方法: // [[Rcpp::export]] arma::uvec m
假设我有两个表: library(data.table) set.seed(1) tab1 tab1 let num val 1: a 1 -0.6264538 2:
我以前问过这个问题,我收到的答案有效:R: How to use setdiff on two string vectors by only comparing the first 3 tab del
给定两个包含数值的向量,例如 a=1.:0.1:2.; b=a+0.1; 我只想选择不同的值。为此,Matlab 提供了函数 setdiff .在上面的例子中很明显 setdiff(a,b) 应该返回
我有一个数据表dt1 : id1id2V1V21一个c(1, 2, 3, 4)c(1, 3, 6)2bc(2, 6, 9, 8)c(8, 5) 我想添加新列,这些列是 setdiff() 的结果, i
我正在尝试从数据集中删除包含某些植被类型的行。我想从未调查的数据中删除那些在调查数据中未找到植被类型的行。我找到了一种方法来做到这一点,但正在寻找一种单行方法。我目前正在这样做: > setdiff(
我是R的新手,正在努力使ggplot2可靠地工作。即使是在其他地方复制的简单代码段也无法在我的机器上运行。 这: library(ggplot2) ggplot(iris, aes(x = Sepal
我是一名优秀的程序员,十分优秀!