2017-10-22 93 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 
相關問題