我有一个整数类型的变量,它的值为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
有人可以建议解决这个问题吗?
答案 0 :(得分:1)
不,你正在考虑一个因素,而不是一个整数:
typeof
了解存储类型(使用help.start()
)很少重要。我建议阅读R语言定义的前几部分,以便快速了解R的类和其他怪癖,这些怪癖将它与您之前使用过的语言区分开来。要到达那里,请键入1/1
并单击“R语言定义”。
从文件中读取,R将字符串转换为因子,这些因子用于分类变量。它不会评估你在那里的算术表达式(2/3
或library(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
,但通常强烈建议不要这样做。