用户给出对应于上三角形中的ids的对,即当Y> 0时。 X。
我在想如何处理这些点以及这里最好的数据结构。
我认为拥有像(x1,y1), (y3,x3), ...
这样的对是直观的,但更好的可以是c(x1,x2,x3,...), c(y1,y2,y3, ...)
,但那只是关于翻转问题。
示例输入
我仍然不确定id.pairs
或者是
lapply(id.pairs,function(z){
x <- z$V1
y <- z$V2
...
})
# not sure if possible
lapply({x.points, y.points}, function(z){
x <- z$V1
y <- z$V2
...
})
动机:为上三角形中的以下函数提供正确的点
# https://stackoverflow.com/q/40538304/54964
cb(plt, x=c(10, 7, 5), y=c(1, 3, 4), rectArgs=list(border="red", lwd=3))
我认为他的第一种方法可行,但我正在考虑如何将他的lapply
应用于参数xleft
和ybottom
# Complete test code http://paste.ubuntu.com/23461804/
# Chat of https://stackoverflow.com/q/40538304/54964 user20650
cb <- function(corrPlot, ..., rectArgs = list() ){
lst <- list(...)
lapply({x,y}, function(x){
c(max(x), min(x))
})
xleft <- match(lst$x, colnames(corrPlot)) - 0.5
ybottom <- n - match(lst$y, colnames(corrPlot)) + 0.5
}
R:3.3.1
操作系统:Debian 8.5
答案 0 :(得分:1)
如果我们假设一个配对点列表,并且您可以信任这些值是有效的(可能不是公平的假设,但可以添加防御),那么您似乎可以用{{1 }和min
:
max
给出
inputData <-
list(
c(1,10)
, c(7,3)
, c(4,5)
)
lapply(inputData, function(x){
c(max(x), min(x))
})
如果转换为矩阵/ data.frame,则可以从向量获得相同的基本输出,然后使用具有相同函数的行[[1]]
[1] 10 1
[[2]]
[1] 7 3
[[3]]
[1] 5 4
。矩阵方法可能看起来像:
apply
并给出:
matData <-
do.call(rbind, inputData)
t(apply(matData, 1, function(x){
c(max(x), min(x))
}))
鉴于更新,我不得不说我同意@Frank您应该对我在这里所拥有的内容有基本的了解,但请改用 [,1] [,2]
[1,] 10 1
[2,] 7 3
[3,] 5 4
和pmax
。然后该函数看起来像这样(注意,我将pmin
和x
设置为参数,因为它们似乎是必需的。)
y
然后,这似乎按预期工作:
cb <- function(corrPlot, x, y, rectArgs = list() ){
# ... pass named vector of x and y names
# for upper x > y, lower x < y
useX <- pmax(x, y)
useY <- pmin(x,y)
n <- ncol(corrPlot)
nms <- colnames(corrPlot)
colnames(corrPlot) <- if(is.null(nms)) 1:ncol(corrPlot) else nms
xleft <- match(useX, colnames(corrPlot)) - 0.5
ybottom <- n - match(useY, colnames(corrPlot)) + 0.5
lst <- list(xleft=xleft, ybottom=ybottom, xright=xleft+1, ytop=ybottom+1)
do.call(rect, c(lst, rectArgs))
}
正如预期的那样,有三种方法可以生成所需的对排序,具体取决于它们是否出现在对列表,矩阵/数据框架或向量中。另一种方法是接受列表或矩阵/ data.frame作为函数的参数,然后使用上面的cb(plt, x=c(1, 3, 4), y=c(10, 7, 5), rectArgs=list(border="red", lwd=3))
或lapply
函数并从中提取所需的值。