2017-10-22 56 views
4

有没有一种方法可以使用字符串作为函数参数。在我的例子中,我有三个向量,我可以使用cbind来组合它们。使用字符串的内容作为函数参数R

> 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功能那里看病字符串的内容?

任何帮助,非常感谢。

回答

5

我们split字符串,得到与mgetcbindvectorlist的S值与do.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]])) 
+1

完美地工作。谢谢你的快速反应!! –

1

更多的图书馆和更多的代码比@ 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 
1

另一种可能性:

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