r - 什么是错误:无法从至由于精度损失。在 R 中
问题描述
我之前运行过这段代码,从未出现过错误。
df.new <- df1
for(i in 1:nrow(df1)){
df.new[j,] <- df1[j,]/df2$specificCol[j]
}
举个例子,
df1[1,1]/df2$specificCol[1] = 6.179306e-06
当我只想手动设置 df.new[1,1] 这个数字时,我得到了错误。
df.new[1,1] <-6.179306e-06
但是这次我收到了这个错误
Error: Assigned data `6.179306e-06` must be compatible with existing data.
i Error occurred for column `x1`.
x Can't convert from <double> to <integer> due to loss of precision.
* Locations: 1.
Run `rlang::last_error()` to see where the error occurred.
我应该如何解决这个错误?
附言。感谢@user20650,以防其他人需要这个:写一个s.data.frame(df.new)
而不是df.new
(这对is.data.frame(df.new)
.
我不知道为什么但是这有效!
解决方案
我不知道为什么这在过去对你有用并且停止了工作(也许包含tibble
包的 tidyverse 发生了变化,但我没有遇到任何明显的问题)但这里有一个关于问题的简短解释:
df = tibble::tibble(x=1L:2L)
如果我们选择df[1,1]
我们得到:
str(df[1,1])
# tibble [1 × 1] (S3: tbl_df/tbl/data.frame)
# $ x: int 1
也就是说,我们得到一个 1x1 类型的 tibble integer
。当我们尝试用非整数值(例如df[1,1] <- 1.2
)替换这个元素时,R 会抱怨。
有几种方法可以解决这个问题。
- 如果我们使用
[[
-indexing 而不是[,
索引,则-extraction[[
会给我们一个向量而不是一个小标题。df[[1]][1] <- 1.2
工作,并将整个列强制为double
(浮点)类型。 df <- as.data.frame(df); df[1,1] <- 1.2
也可以,因为 base-R 数据帧与 tibbles 有不同的规则;特别df[,1]
是向量而不是数据框- 我们还可以将列显式转换为双精度类型;
df[[1]] <- as.double(df[[1]]); df[1,1] <- 1.2
也有效。
基本上,小标题说即使i
是单元素向量,df[,i]
也始终是单列小标题,而不是降级为向量,并且用不同类型的元素替换元素很麻烦(尽管大多数时候 R 是在有意义时允许您在不同的数据类型之间进行相互转换非常松懈)。
推荐阅读
- java - Firebase 未在我的电话号码上发送 OTP 代码 | 爪哇 | 安卓工作室
- r - 根据 R 中 x 轴上的相似模式对变量 geom_point 进行排序
- javascript - 反应“no-unused-vars”和属性未定义错误
- android - 收到通知时从前台服务播放声音
- python - 如何在python中将带有列表的列表压缩到字典中?
- html - 如何将我的 CSS 类链接到我的 HTML 文件?
- youtube - youtube-dl,下载有字幕的文件
- javascript - 如何根据数组中的条件从参考数组中提取项目?
- amazon-web-services - fargate 主机名设置 awsvpc
- python - Python Pandas 单元测试无法识别