我有一个字符串,我想将它转换为与另一个对象相同的类型。您可以假设此对象是一个向量。例如,给定字符串"50"
和目标向量1:10
,我希望"50"
转换为整数50
。我想知道是否有通用的方法来进行转换。如果我知道要将其转换为哪种类型,这很简单,例如如果我希望它是一个数字,我可以使用as.numeric()
。
这个问题的背景是:我想提供一个图形用户界面,以便用户可以编辑表格中的值。在编辑单元格之后,我将获得一个字符串,并且我知道原始数据(通常是矩阵或数据框)。我想用这个新值更新原始数据。我不能简单地data[i, j] <- value
,因为value
是一个字符串。
我可以枚举一些最常见的类型(例如数字,字符,因子,日期......)并使用as.*()
进行转换,但我不想这样做,如果有一种现有的通用方法。对于日期(时区,起源)和因素(可能会增加一个新级别),事情可能有点棘手。
答案 0 :(得分:1)
(你现在可能已经找到了解决这个问题的方法,但无论如何我都试过......)
我检查了R文档,发现base::as(object, Class)
是通用的方法。但是,默认的强制方法是有限的,目前没有默认方法将Character类强制转换为Date类,也没有因子类(您可以通过methods::showMethods("coerce"
检查所有现有方法)。但是,您可以使用methods::setAs()
设置自定义方法,这超出了我的能力范围。
由于我有限的编程知识,我可能会使用以下方法来处理这个问题:
assign_target_class = function (input_vector, target_vector){
is.date = function(x) inherits(x, 'Date')
if (is.date(target_vector)) {vector_class <- 'Date'}
else if (base::is.factor(target_vector)) {vector_class <- 'Factor'}
else {vector_class <- class(target_vector)}
input_vector = as(input_vector, vector_class)
input_vector
}
P.S。如果目标向量的日期变量未设置为日期,我们可以用此参数替换is.date
:
is.convertible.to.date <- function(x) !is.na(as.Date(as.character(x),
tz = 'UTC', format = '%Y-%m-%d'))