我是R语言的新手。我尝试制作简单的代码,以不同的间隔查找一些数据,其中有关于间隔的起始端和表格的信息,现在有更大的间隔,我有几个代码可以解决,但没有一个能够工作。
主要思想是我有几个代表不同数组的变量(i,k,j)。在我看来,代码应该在另一个表中查找两个事物中的每个数组(如果它比第一列大,如果它小于第二列,如果两者都是真的 - 将所有这些都改为另一个表并转到其他区间)。 / p>
if(mydatatable[k,21]>=mydatatable[i,16]){
if(mydatatable[k,21]<=mydatatable[j,18])
shifr[n,1]<-n&shifr[n,2]<-mydata[k,21]&shifr[n,3]<-mydata[k,22]&i+1&j+1&k+1&n+1
else i+1&j+1&k+1
}
else {
if(mydatatable[i,16]==0) end
else i+1&j+1&k+1
}
这段代码有几处错误 if(mydatatable [k,21]&gt; = mydatatable [i,16]){的错误: 缺少需要TRUE / FALSE的值 另外:警告信息: 在Ops.factor(mydatatable [k,21],mydatatable [i,16])中: '&gt; ='对因素没有意义 我想,为什么programm认为,mydatatable是因素?我想,为什么它应该是某种真值/假值,它已经在公式中建立了。 第二个代码几乎相同,甚至可能有效。 我预先建立了值i,k和j为1(i = 1,k = 1,j = 1) 但是出现了错误
> ifelse(mydatatable[k,21]>=mydatatable[i,16],
+ ifelse(mydatatable[k,21]<=mydatatable[j,18],
+ shifr[n,1]<-n&shifr[n,2]<-mydata[k,21]&shifr[n,3]<-mydata[k,22]&i+1&j+1&k+1&n+1,i+1&j+1&k+1),
+ ifelse(mydatatable[i,16]==0,
+ end),
+ i+1&j+1&k+1)
Error in ifelse(mydatatable[k, 21] >= mydatatable[i, 16], ifelse(mydatatable[k, :
unused argument (i + 1 & j + 1 & k + 1)
我很困惑,为什么会这样。 请帮忙。
以下是数据示例。我想要得到的是https://1drv.ms/f/s!Aj4W4aYSeYkGiIFKHG0TV-TRQvWaIQ
这里我得到了几次使用data.table :: foverlaps(我修复了一些问题,但最初我得到了这个)
> data.table::foverlaps(int1,sh2,by.x=c("start","end"),by.y=c("start","end"))
Error in data.table::foverlaps(int1, sh2, by.x = c("start", "end"), by.y = c("start", :
The first 2 columns of y's key is not identical to the columns specified in by.y.
我以前的代码也取得了一些进展。几个问题:首先,如何统一几个命令(我使用&amp; and;但它们都没有在shifr[n,1]<-n;shifr[n,2]<-sh[k,1];shifr[n,3]<-sh[k,1];i+1&j+
中正常工作?)
第二,关于FUN中的错误(左,右)。
> ifelse(sh[k,1]>=int[i,1],
+ + ifelse(sh[k,2]<=int[j,2],
+ + shifr[n,1]<-n;shifr[n,2]<-sh[k,1];shifr[n,3]<-sh[k,1];i+1;j+1;k+1;n+1,i+1;j+1;k+1),
Error: unexpected ';' in:
" + ifelse(sh[k,2]<=int[j,2],
+ shifr[n,1]<-n;"
> + i+1;j+1;k+1
[1] 16
[1] 16
[1] 65
> ifelse(sh[k,1]>=int[i,1],
+ + ifelse(sh[k,2]<=int[j,2],
+ + shifr[n,1]<-n;shifr[n,2]<-sh[k,1];shifr[n,3]<-sh[k,1];i+1&j+1&k+1&n+1,i+1&j+1&k+1),
Error: unexpected ';' in:
" + ifelse(sh[k,2]<=int[j,2],
+ shifr[n,1]<-n;"
> + i+1&j+1&k+1
[1] TRUE
> ifelse(sh[k,1]>=int[i,1],
+ + ifelse(sh[k,2]<=int[j,2],
+ + shifr[n,1]<-n&shifr[n,2]<-sh[k,1]&shifr[n,3]<-sh[k,1]&i+1&j+1&k+1&n+1,i+1&j+1&k+1),
+ + i+1&j+1&k+1
+ )
Error in FUN(left, right) :
operations are possible only for numeric, logical or complex types
答案 0 :(得分:0)
实际上,这段代码很糟糕。我最终做到了(在python中):
for i in interval:
...
if float(i) < intervals[b][0]:
print("Interval are too high", intervals[b][1])
break
....
if float(i) >= intervals[b - 1][1]:
....