一个快速的答案,虽然这在 cmets 中已部分解决。
正如 Infominer 所建议的,您得到的错误是您尝试除以 3 的列实际上是一个因素。按照手册availible here的定义,一个因素是
因子是一个向量对象,用于指定相同长度的其他向量的分量的离散分类(分组)
基本上,如果您有一个向量c("A", "B", "A", "C"),它可以是一个character 向量,也可以映射为一个因子,使"A" 的值为1(因为它首先出现),"B" a值 2 和 "C" 值 3。分配的这些值可以更改,但这并不重要。运行
factorVector <- c("A", "B", "A", "C")
class(factorVector) #[1] "character"
as.numeric(factorVector) #[1] NA NA NA NA + 1 warning
factorVector <- factor(factorVector)
class(factorVector) #[1] "factor"
as.numeric(factorVector) #[1] 1 2 1 3
说明此属性以及 R 中因子和字符之间的主要区别。
请注意,当我尝试将字符向量转换为数字时,它会返回 NA 并引发错误,而因子会为 factorVector 中的每个唯一实例唯一地返回一个数字。
需要注意的重要一件事是,当从*.txt 或*.csv 文件导入数据时,这可能会影响数据的导入方式。例如read.table(----) 对文件中的逗号分隔很敏感。在丹麦,小数点用逗号 (,) 标记,而列用分号 (;) 分隔。大多数实现将逗号标准化为列分隔符,将点 (.) 标准化为小数点,因此丹麦文件将
- 如果将
, 标识为列分隔符,则可能会错误地分隔列
- 如果它确实找到
; 作为列分隔符但保留. 作为小数点,十进制数字可以转换为字符串,因为真正的十进制标记 (,) 未被识别为小数。李>
因此,在通过read.table 或等效方法导入数据时,在导入和设置sep(列分隔符)和dec(小数点符号)时,了解文件的设置方式非常重要.例如read.csv("dataFile.txt", sep = ";", dec = ",") 将正确读取丹麦文件格式。
您的文件似乎包含可能没有标准 . 作为小数标记的数字。请确保在执行计算之前检查您的数据是否正确导入。