用R中的if else语句警告

时间:2014-08-12 19:09:29

标签: r if-statement

我的数据与此类似

start end strand
45    52    +
66    99    -

让我们称这个表为。

如果我有一个+ in strand,我必须返回两个值,从起始值开始是+/- 10。

所以,在这里我必须返回55和35.

如果我有一个 - in strand,我必须返回两个值,即结束值+/- 10。

为此,我写了这个程序:

if(table1$strand == '+'){
newstart = table1$start - 10
newend = table1$start + 10
} else {
newstart = table1$end - 10
newend = table1$end + 10
}

但是,我收到了这条警告信息:

条件的长度> 1,只使用第一个元素

有没有办法使用矢量化方法,以避免这种情况?

2 个答案:

答案 0 :(得分:4)

您想使用ifelse来矢量化流程:

ifelse(table1$strand == '+', table1$start, table1$end) 

这可以一步到位:

> outer(ifelse(table1$strand == '+', table1$start, table1$end), c(10, -10), `+`)
     [,1] [,2]
[1,]   55   35
[2,]  109   89

答案 1 :(得分:2)

以下是使用ifelse的示例。如果这是您的样本数据

table1<-structure(list(start = c(45L, 66L), end = c(52L, 99L), strand = structure(c(2L, 
1L), .Label = c("-", "+"), class = "factor")), .Names = c("start", 
"end", "strand"), class = "data.frame", row.names = c(NA, -2L))

然后你可以做

newstart <- ifelse(table1$strand=="+", table1$start, table1$end)-10
newend <- newstart + 20

一次操作所有行。