将expand.grid与对象一起使用

时间:2016-02-13 00:16:41

标签: r

我有以下向量和一个组合数据框,它们是下面表达式的对象。

x <- c(1,2,3,4)
y <- c(5,6,7,8)
z <- c(9,10,11,12)

h <- data.frame(x,y,z) 

D <- print (( rep ( paste ( "h[,3]" )  , nrow(h) )) , quote=FALSE )
# [1] h[,3] h[,3] h[,3] h[,3] 

DD <- c ( print ( paste ( (D) , collapse=","))) 
# "[1] h[,3],h[,3],h[,3],h[,3]"

DDD <- print ( DD, quote = FALSE ) 

# However when I place DDD in expand.grid it does not work

is(DDD)
[1] "character"  "vector"  "data.frameRowLabels"  "SuperClassMethod" 

因此expresion expand.grid(DDD)不起作用。我怎么能得到一个过程,我重复n次表示一个对象的字符元素,以获得放在expand.grid中的重复字符元素数量的向量。

1 个答案:

答案 0 :(得分:3)

看起来你正在尝试生成一些R代码然后执行它。对于您的情况,这将起作用:

# From your question
DDD
# [1] "h[,3],h[,3],h[,3],h[,3]"

# The code that you wish to execute, as a string
my_code <- paste("expand.grid(", DDD, ")")
# [1] "expand.grid( h[,3],h[,3],h[,3],h[,3] )"

# Execute the code
eval(parse(text = my_code))

我真的建议 反对 这样做。请参阅here,了解为什么eval(parse(text = ...))不是一个好主意。

完成任务的更“R”解决方案:

# Generate the data.frame, h
x <- c(1,2,3,4)
y <- c(5,6,7,8)
z <- c(9,10,11,12)
h <- data.frame(x,y,z) 

# Repeat the 3rd column 3 times, then call expand.grid
expand.grid(rep(list(h[,3]), times = 3))

# Alternatively, access the column by name
expand.grid(rep(list(h$z), times = 3))

顺便说一句,我建议查看expand.grid的帮助文件 - 在了解expand.grid的参数后,它们帮助我很快找到了问题的解决方案。