【问题标题】:a function that accepts a string接受字符串的函数
【发布时间】:2021-04-30 03:05:08
【问题描述】:

我有一个将字符串作为参数的函数。 z

p.str <- function(mystr){
  
  p.ad <-  p.adjust(as.numeric(strsplit(mystr, " "))) #
  mystr<- as.numeric(strsplit(mystr, " ")) #
  rez <- paste(mystr,p.ad,collapse='\n') #
  
  return(rez)
}

z <- data.table(z)

p.ad - 计算调整值

mystr - 我们编写的字符串并将其转换为数字

然后我写入 data.table。

我得到一个错误:'list' 对象不能被强制输入'double'

我的期望:

|     z        |
|--------------|
|  0.002 0.006 |
|  0.003 0.006 |
|  0.555 0.555 | 

【问题讨论】:

    标签: r


    【解决方案1】:

    strsplit 返回一个list。这是因为它是矢量化的,例如strsplit(c("1 2", "3 4 5"), split = " ")

    如果您知道输入字符串的长度为 1,那么您可以安全地使用 unlist(strsplit(...))strsplit(...)[[1]]。您还可以检查输入的长度是否为 1。

    此外,在您的函数中重复使用as.numeric(strsplit(mystr, " ")) 是低效且不好的做法。如果您需要多次使用该结果,请将其分配给一个对象。

    p.str <- function(mystr){
      
      num  <- as.numeric(unlist(strsplit(mystr, " ")))
      p.ad <- p.adjust(num) 
      paste(num, p.ad, collapse='\n')
    
    }
    

    【讨论】:

      【解决方案2】:

      试试这个功能:

      p.str <- function(mystr){
        vec <- as.numeric(strsplit(mystr, " ")[[1]])
        p.ad <-  p.adjust(vec) #
        rez <- paste(vec,p.ad,collapse='\n') 
        return(rez)
      }
      
      cat(p.str('0.002 0.003 0.555'))
      
      #0.002 0.006
      #0.003 0.006
      #0.555 0.555
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-23
        • 2013-05-05
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多