繁体   English   中英

识别数字是否在R中的数字范围内

[英]identify if a number is within a range of numbers in R

我知道标题使听起来很容易,但是我有一个For循环,可以绘制我的数据。 随着值的变化,X轴的限制也将变化(每个图的开始和结束都不同)。 但是,我希望有一个定义的X轴范围,该范围对于所有相似的图都保持不变。 我想要的X大约有40个可能的范围,这使情况变得复杂。

对于每个图,我都有一个X边形的数据框,我想从中选择。 它基本上看起来像:

   Trait  start    end
    A     123456   134567
    B     234546   245678
    C     234546   245678
    D     345678   356789

等等。 因此,如果一个循环为我提供值:特征C,开始= 235000,结束= 240000,我想自动使用第三组默认X-lims。

编辑:添加了更多信息(特质)。

如果您显示的data.frame称为df (并且您确定变量end大于start ),则此方法应该起作用:

which(start > df$start & end < df$end)[1]

修改以回答修改后的问题

添加更多条件时,可以扩展上述逻辑:

## Make your data easily reproducible for others
df <- read.table(text="Trait  start    end
    A     123456   134567
    B     234546   245678
    C     234546   245678
    D     345678   356789", header=TRUE)

## Set values from within your example loop
Trait <- "C"
start <- 235000
end <- 240000

## Get index of desired row
i <- which(Trait==df$Trait & start > df$start & end < df$end)[1]
## Extract xlim values in the form of a numeric vector
myxlim <- unname(unlist(df[i, c("start", "end")]))
myxlim
[1] 234546 245678

我不确定我是否会完全关注这个问题。 如果我对您的理解正确,则希望确保每个图的范围为11111(无论如何,在此示例中),但是上下限值会有很大差异。 因此,现在,您正在寻找一种创建可能需要的所有上限和下限的表格的方法,然后在进行绘制时要查找它们。

我建议您只需编写plot语句以确保最小值和最大值始终相距11111,就可以轻松得多。

假设您在一次循环迭代中开始了<-235000,结束<-240000,特征<-B。 您可以像这样构造代码吗?

diff <- end-start
gap <- 11111-diff
plot(thing_you_plot,xlim(start-(gap/2),end+(gap/2))

带数字:

diff <- 240000-235000 (5000)
gap <- 11111-5000 (6111)
plot(thing_you_plot,xlim(235000-(6111/2),240000+(6111/2)) 

(x limits are: 231944.5,243055.5, making the plot 11111 in length)

显然,如果需要,可以使用下限和上限函数获取舍入数字,而不是小数。 从您的问题尚不清楚,“特征”如何真正影响尺寸。 如果可以使用相同的尺寸绘制两个特征(B和C),那么为什么根本需要该表? 我认为您可以使用简单的函数在每个图上做得更好。

根据版本进行编辑:

乔希(Josh)击败了我,但自从我输入几乎所有内容后,这里又一次出现了。

df <- data.frame(trait=c("A","B","C","D"),
                 start=c(123456,234546,234546,345678),
                 end=c(134567,245678,245678,356789))

trait <- "C"
start <- 235000
end <- 240000

xmin <- df[which(start > df$start & end < df$end & trait == df$trait),2]
xmax <- df[which(start > df$start & end < df$end & trait == df$trait),3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM