在R中,使用for循环seq(),得到奇怪的结果/行为

时间:2016-03-16 14:38:10

标签: r loops seq

我以0.1的增量循环遍历1到1.9的序列,以在我的数据中找到这些有价值的位置(datapositions1)。然而,当循环时,值“1.7”虽然在数据中肯定没有被捕获。但是,如果我使用(1,1.7,by = 0.1)的序列,那么它会选择“1.7”&如果我使用(1.1,1.9,by = 0.1)的序列,那么它既不会拾取“1.7”也不会“1.8”。

我的数据的信息:

name    position  value
Name A      1.8  458.77011494
Name A      3.3  352.10734463
Name A      1.7  167.26923077
Name A      1.5   14.19756839
Name A      3.0   96.47292419
Name A      1.9  636.25490196
Name A      1.7    1.81479312
Name A      1.2  130.94444444
Name A      1.6   43.66501241
Name B      1.2   86.40421456
Name B      1.1   48.13294798
Name B      1.0    3.28143556
Name C      1.7  460.53846154
Name C      1.8  501.41545894
Name C      1.0  112.03095752
Name C      1.7  216.39130435

我正在使用的功能:

Average= function(){ 
  df = data.frame()
  for (i in seq(1, 1.9, 0.1)){
    #print(i)
    #b = datapositions1[c(datapositions1$position == 1.7),]
    #print(b)
    p = datapositions1[c(datapositions1$position == i),]
    print(p)
    df = rbind(df, data.frame(p))
  }
 df
}
Average()

同样在上面的代码中,我使用“b”时,它总是在使用“1.7”时返回正确的数据,而使用“i”的“p”则丢失“1.7”数据。

这是“p”输出“1.7”数据的输出。

497   Name A      1.6  60.997704
543   Name C      1.6 146.058824
544   Name C      1.6 163.133739
[1] 1.7
[1] name position      value
<0 rows> (or 0-length row.names)
[1] 1.8
    name position        value
42    Name A      1.8  20.614468
43    Name B      1.8  49.724638
89    Name A      1.8 101.725367

任何建议请:)

1 个答案:

答案 0 :(得分:2)

我想我现在有一个解决方案。

我在文档中读到了这个.. “第二种形式从,从+到......生成,直到小于或等于的序列值。指定 - 来自和相反的符号是一个错误。请注意,计算出的最终值可以超出允许舍入错误,但被截断为。('超越'是最多1e-10倍abs(从 - 到)。)“

我注意到这可能是一个舍入问题,而seq代码可能会执行以下操作:

a+=0.1 
> 0.1
a+=0.1 
> 0.2000000002

意思是“i”永远不会等于表中所代表的内容。 因此使用:

i = as.character(i)

似乎解决了这个问题!