R在文件上IO后产生不同的结果
Posted
技术标签:
【中文标题】R在文件上IO后产生不同的结果【英文标题】:R produces different result after IO on file 【发布时间】:2014-01-28 03:48:53 【问题描述】:作为 R 新手,我有一个关于写入和读取矢量数据的问题。
我的例子 1
n = 100 g = 6 set.seed(g) d(source),它按预期打印“Calinski 标准最佳聚类数:5”。
例2:(先写数据帧d,再读)
n = 100 g = 6 set.seed(g) d但是,示例 2 打印“Calinski 标准最优聚类数:1”。
我认为在从 R 中的文件进行 IO 之后,格式(或其他内容)已经改变。但我不知道 R 如何读取和写入数字。谁能给我一些线索,谢谢。
编辑 如果文件中没有列名和行名,问题就解决了。
write.table(d, "d.txt", sep='\t', quote=FALSE, row.name=FALSE, col.names=FALSE)读取时,R 也会读取行名和列名,。 另一种是在阅读时转义这些名称。
【问题讨论】:
两种情况下的情节是一样的吗?代码看起来完全一样...你是否在再次阅读后打印以比较它是否相同(也许只是它的head
会做head(d)
)
情节相同,表框d的打印相同。
将数字写入文本文件很可能会丢失一些精度。请改用save
或saveRDS
。
感谢 Joshua,作为初学者和实验数据,我想要文本文件,因为它更容易阅读和修改。我将在真实数据中使用 saveRDS。
【参考方案1】:
无法为一组计算 Calinski 指数,但它变为 Inf 或 -Inf。在第一个示例中,它恰好是 -Inf,而在第二个示例中,它恰好是 Inf,当您查找 which.max
时,您得到的是 Inf。我不知道为什么我们实际上要为一类情况计算索引,但如果你搜索最好的结果,你应该忽略第一种情况。我们在plot
命令中执行此操作,该命令在这两种情况下都给出了五个集群作为最佳结果。在这两种情况下,您的代码的以下修改将给出相同的答案:
calinski.best <- as.numeric(which.max(fit$results[2,-1])) + 1
cat("Calinski criterion optimal number of clusters:", calinski.best, "\n")
我们必须有+1
,因为我们省略了一列。
Inf/-Inf 不确定性的小细节。正如您在?cascadeKM
中看到的,Calinski 标准定义为 (SSB/(K-1))/(SSW/(n-K)) 并且对于一组 K=1,因此 SSB/0 = Inf。对于一组也是 SSB=0,但计算为零,这些在数字计算机中很少准确,在我的计算机中,零是 -2.8e-14 和 -2.8e-14/0 = -Inf。在第二个示例中,SSB=2.8e-14 和 2.8e-14/0 = Inf。当您寻找最佳值时,只需忽略第一列。有时 SSB 可以精确为零,然后 0/0 = NaN(不是数字)。
【讨论】:
以上是关于R在文件上IO后产生不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
$\lambda = 0$ 和 OLS 的 LASSO 在 R glmnet 中产生不同的结果
CUDA 内核在 2 个不同的 GPU 上产生不同的结果(GeForce 8600M GT 与 Quadro FX 770M)