不使用eval()将字符串转换为命令

时间:2014-03-11 18:26:30

标签: r subset

我知道eval()可能导致难以维护的代码,但我再次运行到我不知道还能使用什么的情况。

以下是从a获取列data并创建新数据框的手动方式。

data <- data.frame(a=1:5, b=6:10)
new.data <- data.frame( a = data[ , "a"] )

这适用于一列。但是,在我的实际应用程序中,我必须将多个列提取到多个新数据框中,并且我必须按名称引用列(因此标题,将列名称(即字符串)转换为命令) 。如果不诉诸eval(parse = text),我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

请记住,数据框存储为列表,列表可以是带有字符串向量的子集(如果列表已命名,但列名称是列表元素的名称)。所以你可以这样做:

> mydf <- data.frame( a=1:5, b=5:1, c=11:15, d=21:25 )
> 
> mycols <- c('a','d')
> 
> mydf[ mycols ]
  a  d
1 1 21
2 2 22
3 3 23
4 4 24
5 5 25
> str(.Last.value)
'data.frame':   5 obs. of  2 variables:
 $ a: int  1 2 3 4 5
 $ d: int  21 22 23 24 25