我在RStudio和Excel 2011 for Mac OS X上运行R版本3.0.2。我正在执行4组45,015值之间的分位数归一化。是的我知道bioconductor包,但我的问题更为笼统。它可以是任何其他计算。问题是,当我在Excel中“手动”执行计算(1)和(2)我在R中从头开始编写的程序时,我得到高度相似但不完全相同的结果。通常,用(1)和(2)获得的值相差小于1.0%,尽管有时更多。
这种变化可能来自何处,我应该注意哪些与R和/或Excel中的数字近似有关?这是否来自其中任何一个程序中缺乏浮动精度?我怎么能避免这个?
[编辑] 正如评论中向我建议的那样,这可能是特定于案例的。为了提供一些上下文,我使用9行的测试数据详细描述了下面的方法(1)和(2)。这四个数据集称为A,B,C,D。
[编辑后评论] 当我在一个非常小的数据集(测试样本:9行)上执行此操作时,R和Excel中的结果没有差异。但是当我将相同的代码应用于实际数据(45,015行)时,R和Excel之间会略有不同。我不知道为什么会这样。
(2)R代码:
数据框A
Aindex A
1 2.1675e+05
2 9.2225e+03
3 2.7925e+01
4 7.5775e+02
5 8.0375e+00
6 1.3000e+03
7 8.0575e+00
8 1.5700e+02
9 8.1275e+01
数据框B
Bindex B
1 215250.000
2 10090.000
3 17.125
4 750.500
5 8.605
6 1260.000
7 7.520
8 190.250
9 67.350
数据框C
Cindex C
1 2.0650e+05
2 9.5625e+03
3 2.1850e+01
4 1.2083e+02
5 9.7400e+00
6 1.3675e+03
7 9.9325e+00
8 1.9675e+02
9 7.4175e+01
数据框D
Dindex D
1 207500.0000
2 9927.5000
3 16.1250
4 820.2500
5 10.3025
6 1400.0000
7 120.0100
8 175.2500
9 76.8250
代码:
#re-order by ascending values
A <- A[order(A$A),, drop=FALSE]
B <- B[order(B$B),, drop=FALSE]
C <- C[order(C$C),, drop=FALSE]
D <- D[order(D$D),, drop=FALSE]
row.names(A) <- NULL
row.names(B) <- NULL
row.names(C) <- NULL
row.names(D) <- NULL
#compute average
qnorm <- data.frame(cbind(A$A,B$B,C$C,D$D))
colnames(qnorm) <- c("A","B","C","D")
qnorm$qnorm <- (qnorm$A+qnorm$B+qnorm$C+qnorm$D)/4
#replace original values by average values
A$A <- qnorm$qnorm
B$B <- qnorm$qnorm
C$C <- qnorm$qnorm
D$D <- qnorm$qnorm
#re-order by index number
A <- A[order(A$Aindex),,drop=FALSE]
B <- B[order(B$Bindex),,drop=FALSE]
C <- C[order(C$Cindex),,drop=FALSE]
D <- D[order(D$Dindex),,drop=FALSE]
row.names(A) <- NULL
row.names(B) <- NULL
row.names(C) <- NULL
row.names(D) <- NULL
(1)Excel
Custom Sort...
:
average=()
:
average
&gt;用Special Paste...
列中的值替换A,B,C和D列中的值Values
:
答案 0 :(得分:2)
如果您使用完全相同的算法,您将获得完全相同的结果。不在1%之内,而是在小数点后10位。所以你没有使用相同的算法。细节可能不会改变这个一般性答案。
(或者它可能是excel或r中的错误,但这不太可能)
答案 1 :(得分:2)
回答我自己的问题!
它最终成为Excel的错(好吧,有点):在某些时候,无论是从原始的TAB分隔文件转换为CSV,还是稍后当我开始复制和粘贴东西时,这些值被四舍五入
原始的TAB分隔文件有6个小数,而CSV文件只有2个。到目前为止,我一直在进行分析,在Excel中从6位十进制数据中进行分位数归一化,而我从CSV读取数据我的分位数归一化函数的文件在R中,因此发生了变化。
对于R和Excel的上述示例,我使用了来自同一来源的数据,这就是我得到相同结果的原因。
你认为现在我认为最好的是: 1 /改变标题让其他无知的人知道这种事情会发生吗? 2 /考虑这个帖子没用并删除它?