确定某个数字是否在R中的数字范围内

确定某个数字是否在R中的数字范围内,r,plot,R,Plot,我知道这个标题听起来很简单,但我有一个For循环,可以绘制我的数据。随着值的变化,X轴的限制也随之变化(每个绘图的起点和终点不同)。但是,我希望有一个定义的X轴范围,对于所有类似的绘图保持不变。这是复杂的,因为我想要的X有大约40个可能的范围 我有一个x-lims的数据框,我想从中为每个图选择。它基本上看起来像: Trait start end A 123456 134567 B 234546 245678 C 234546

我知道这个标题听起来很简单,但我有一个For循环,可以绘制我的数据。随着值的变化,X轴的限制也随之变化(每个绘图的起点和终点不同)。但是,我希望有一个定义的X轴范围,对于所有类似的绘图保持不变。这是复杂的,因为我想要的X有大约40个可能的范围

我有一个x-lims的数据框,我想从中为每个图选择。它基本上看起来像:

   Trait  start    end
    A     123456   134567
    B     234546   245678
    C     234546   245678
    D     345678   356789
等等。因此,如果一个循环给我值:Trait C,start=235000,end=240000,我想自动使用第三组默认的X-lims


编辑:添加更多信息(特征)

如果所显示的data.frame被称为
df
(并且您确信变量
end
将大于
start
),这应该可以工作:

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

修改以回答修改后的问题

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

## 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
##使您的数据易于为他人复制

df如果显示的data.frame被称为
df
(并且您确信变量
end
将大于
start
),则这应该可以工作:

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

修改以回答修改后的问题

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

## 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
##使您的数据易于为他人复制

df我不确定我是否完全理解这个问题。如果我理解正确,您希望确保每个绘图的范围为11111(无论如何,在本例中),但上限和下限值将发生显著变化。所以,现在,您正在寻找一种方法来创建一个包含所有可能的上限和下限的表,然后在绘图时查找它们

我建议通过简单地编写plot语句来确保最小值和最大值总是相隔11111,这样做会容易得多


假设你开始了我不确定我是否完全理解这个问题。如果我理解正确,您希望确保每个绘图的范围为11111(无论如何,在本例中),但上限和下限值将发生显著变化。所以,现在,您正在寻找一种方法来创建一个包含所有可能的上限和下限的表,然后在绘图时查找它们

我建议通过简单地编写plot语句来确保最小值和最大值总是相隔11111,这样做会容易得多


假设您在调用
plot
时启动了
xlim
ylim
不工作?
xlim
ylim
调用
plot
不工作?当我尝试此操作时,它告诉我哪些data.frame值包含数据xlims,但是只有一个应该被选择。我认为它不能完美地工作,因为我实际上需要包括第三个变量(“Trait”在我更新的帖子中)。每组值只能有一个适合的data.frame行(并且end始终大于start)。请告诉我。我正要进行基本相同的编辑。:)当我尝试这个方法时,它告诉我哪些data.frame值包含数据xlims,但只应选择一个。我认为它工作得不完美,因为我实际上需要包含第三个变量(“Trait”在我更新的帖子中)。每组值只能有一个适合的data.frame行(并且end始终大于start)。请告诉我。我正要进行基本相同的编辑。:)不,那不是我想要的。我只是把这些数字作为例子。事实上,他们之间的距离是1111,这只是我的懒惰。实数随机变化。哦,好吧,这不是算法。对不起,你的问题不清楚,也许你应该编辑范围?你不是在开玩笑说我几乎打败了你。如果我能看到“塔勒曼正在打字”之类的东西,我就不会费心了;)由于你的两个答案都一样,我在第一个上打了勾。非常感谢你们两个,真是魅力四射。虽然我还是新手,但我爱R!不,那不是我想要的。我只是把这些数字作为例子。事实上,他们之间的距离是1111,这只是我的懒惰。实数随机变化。哦,好吧,这不是算法。对不起,你的问题不清楚,也许你应该编辑范围?你不是在开玩笑说我几乎打败了你。如果我能看到“塔勒曼正在打字”之类的东西,我就不会费心了;)由于你的两个答案都一样,我在第一个上打了勾。非常感谢你们两个,真是魅力四射。虽然我还是新手,但我爱R!
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]