【问题标题】:using the content of a string as a function argument in R使用字符串的内容作为 R 中的函数参数
【发布时间】:2017-10-22 03:06:42
【问题描述】:

有没有办法将字符串用作函数参数。在我的示例中,我有三个向量,我可以使用 cbind 来组合它们。

> df1<-1:3
> df2<-11:13
> df3<-21:23
> 
> cbind(df1, df2, df3)
     df1 df2 df3
[1,]   1  11  21
[2,]   2  12  22
[3,]   3  13  23

假设我有一个字符串“df1, df2, df3”。

> x <- 'df1, df2, df3'

有没有办法在 cbind 中使用字符串的内容?例如,我想要一种方法来执行以下操作...

> cbind(x)
     df1 df2 df3
[1,]   1  11  21
[2,]   2  12  22
[3,]   3  13  23

实际上,它是这样做的……

> cbind(x)
     x              
[1,] "df1, df2, df3"

有没有办法让 cbind 函数看到字符串的内容?

非常感谢任何帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们split这个字符串,用mgetcbind得到值,vectors的listdo.call得到值

    do.call(cbind, mget(strsplit(x, ', ')[[1]]))
    #     df1 df2 df3
    #[1,]   1  11  21
    #[2,]   2  12  22
    #[3,]   3  13  23
    

    或者代替do.call(cbind,我们也可以转换成data.frame

    data.frame(mget(strsplit(x, ', ')[[1]]))
    

    【讨论】:

    • 完美运行。感谢您的快速回复!
    【解决方案2】:

    比@akrun 的答案更多的库和更多的代码,但我做到了,所以我发布了它。

    library(stringr)
    library(dplyr)
    
    df1<-1:3
    df2<-11:13
    df3<-21:23
    x <- 'df1, df2, df3'
    
    x2 <- str_split(x, ", ", simplify=TRUE)
    x3 <- lapply(x2, function(i){as.data.frame(eval(parse(text=i)))})
    x4 <- bind_cols(x3)
    names(x4) <- x2
    

    【讨论】:

      【解决方案3】:

      另一种可能性:

      eval(parse(text=paste('cbind(',x,')')))
      #      df1 df2 df3
      # [1,]   1  11  21
      # [2,]   2  12  22
      # [3,]   3  13  23
      

      【讨论】:

        最近更新 更多