将字符串转换为与另一个对象相同的类型

时间:2016-07-28 16:29:09

标签: r

我有一个字符串,我想将它转换为与另一个对象相同的类型。您可以假设此对象是一个向量。例如,给定字符串"50"和目标向量1:10,我希望"50"转换为整数50。我想知道是否有通用的方法来进行转换。如果我知道要将其转换为哪种类型,这很简单,例如如果我希望它是一个数字,我可以使用as.numeric()

这个问题的背景是:我想提供一个图形用户界面,以便用户可以编辑表格中的值。在编辑单元格之后,我将获得一个字符串,并且我知道原始数据(通常是矩阵或数据框)。我想用这个新值更新原始数据。我不能简单地data[i, j] <- value,因为value是一个字符串。

我可以枚举一些最常见的类型(例如数字,字符,因子,日期......)并使用as.*()进行转换,但我不想这样做,如果有一种现有的通用方法。对于日期(时区,起源)和因素(可能会增加一个新级别),事情可能有点棘手。

1 个答案:

答案 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'))