在变量中存储整数值会给出不同的值

时间:2015-10-04 12:20:03

标签: r type-conversion variable-assignment

我有一个整数类型的变量,它的值为1/1

> typeof(res[3,"V2.review/helpfulness"])
[1] "integer"
> res[3,"V2.review/helpfulness"]
[1]  1/1

现在,当我以整数存储或转换它时,我希望值为1和1的除法,即1 例如,如果我有2/3,我希望该值为0.6666 但它给我的结果是

> as.integer(res[3,"V2.review/helpfulness"])
[1] 6
> as.double(res[3,"V2.review/helpfulness"])
[1] 6

有人可以建议解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

不,你正在考虑一个因素,而不是一个整数:

typeof

了解存储类型(使用help.start())很少重要。我建议阅读R语言定义的前几部分,以便快速了解R的类和其他怪癖,这些怪癖将它与您之前使用过的语言区分开来。要到达那里,请键入1/1并单击“R语言定义”。

从文件中读取,R将字符串转换为因子,这些因子用于分类变量。它不会评估你在那里的算术表达式(2/3library(data.table) DF[,c("num","den")] <- tstrsplit(as.character(DF$x), "/", type.convert = TRUE) DF # x num den # 1 1/1 1 1 # 2 2/3 2 3 ),它也没有任何分数类,只有整数,复数和浮点数。

如果要精确存储分数,请分别存储分子和分母:

DF$xnum <- DF$num/DF$den # obviously not an integer

DF
#     x num den      xnum
# 1 1/1   1   1 1.0000000
# 2 2/3   2   3 0.6666667

要现在评估分数,您可以使用

sapply(DF, class)
#         x       num       den      xnum 
#  "factor" "integer" "integer" "numeric" 

要查看所有列的类,请使用

DF$xnum <- sapply(as.character(DF$x), function(z) eval(parse(text=z)))

评估分数的捷径是List<Type:IMyInterface> a = new List<Type:IMyInterface>; a.Add(typeof(MyClass1)); //MyClass1..3 implementing IMyInterface a.Add(typeof(MyClass2)); a.Add(typeof(MyClass3)); IMyInterface c = default(a[1]); //create MyClass2 object a.Add(typeof(Object)); //must fail ,但通常强烈建议不要这样做。