我遇到输出号码R给我的问题比输入值高几倍。
我的脚本正在读取制表符分隔的文本文件,其中包含以下数据(摘录):
4800.000000000004 63.79541685299562
4808.000000000004 65.44888307144669
4816.000000000004 65.66174624010496
4824.000000000004 65.85413227845713
4832.000000000004 66.3271958214957
4840.000000000004 66.67304406065
4848.000000000004 66.90294325983125
4856.000000000004 67.16391462118467
4864.000000000004 67.3649619902818
4872.000000000004 67.47950644400306
4880.000000000004 67.53568545748826
4888.000000000004 67.5820448431992
4896.000000000004 67.70983887523283
4904.000000000004 67.84124194437604
4912.000000000004 67.78234409282649
4920.000000000004 67.17896344097808
4928.000000000004 65.16964351857043
这被标记为intenistyFile - 来自音频分析程序的强度数据。第一列是以毫秒为单位的时间,第二列是以分贝为单位的强度。
从这里,我获取两个时间值之间的所有强度数据(取自循环中的另一个文件):
beginTime <- labelFile[i,1]
endTime <- labelFile[i,2]
...
#Read intensity file. Grab all pitch measurements >= begin time and <= end time
C <- subset(intensityFile, V1>=beginTime & V1<=endTime)
#Do the following calculations on the F0, stored in the data table
maxIntense <- max(as.numeric(C$V2))
minIntense <- min(as.numeric(C$V2))
rangeIntense <- maxIntense - minIntense
meanIntense <- mean(as.numeric(C$V2))
stdevIntense <- sd(as.numeric(C$V2))
(我已经省略了定义&#34; labelFile&#34;,这是我得到时间值的地方。)
问题是,在我执行此操作后,我得到这样的值:
maxIntense minIntense rangeIntense meanIntense
23242 19110 4132 21466.66667
24699 19851 4848 23384
22109 16905 5204 20892.28571
25442 13973 11469 20764.46154
26410 16347 10063 23433.18182
25452 13750 11702 20401.63636
27241 9788 17453 23040.41667
23795 19965 3830 22413.5
23528 19584 3944 22074.14286
27530 14302 13228 21571.91667
这显然是大规模膨胀。这些是人类说话,而不是行星爆炸的炸弹。我试过使用as.double()而不是as.numeric()(我必须强制一个类型,因为某种原因强度会被读取为一个因素)。什么可能导致这种奇怪的通货膨胀?
注意 - 我对一个表示音高值的文件做了基本相同的操作,但没有奇怪的通货膨胀(它也是制表符分隔的文本)。
编辑:修正由于下面的joran评论的第一个评论。 C $ V2读取的原因是每个文件都有许多值&#34; - undefined - &#34;。我在R中运行之前手动删除了这些并且它运行了。显然有一个重复,但我不会需要它。