R在交叉函数中传递向量

R在交叉函数中传递向量,r,tidyr,R,Tidyr,我试图在tidyr'crossing'函数中传递一个向量,但我不知道如何做。以下是我想做的:我想将对象michel,anita,robert交叉积,以获得数据帧每个人,如下所示: # objects to combine michel <- c("Berlin","Tokyo","Amsterdam") anita <- c("London","Montreal") robert &

我试图在tidyr'crossing'函数中传递一个向量,但我不知道如何做。以下是我想做的:我想将对象michelanitarobert交叉积,以获得数据帧每个人,如下所示:

# objects to combine

michel <- c("Berlin","Tokyo","Amsterdam")
anita <- c("London","Montreal")
robert <- "Moscow"

# combination

library(tidyr)

everybody <- crossing(michel,anita,robert)
#要合并的对象

michel我们可以使用
mget
返回字符串对象的值

everybody2 <- crossing(!!! mget(vector1[[1]]))
identical(everybody, everybody2)
#[1] TRUE
这里,“vector1”是一个
data.frame
,包含一列字符串。我们用
[[1]]
提取第一列,用
mget
获取字符串对象的值到
列表中,在
交叉处拼接列表(
!!!

注意:我们使用了
R4.0
,而
data.frame
as.data.frame
中的默认选项是
stringsAsFactors=FALSE
。如果R版本为<4.0,则将
因子
类转换为
字符
,并使用
as.character
或在
as.data.frame
中指定
stringsafactors=FALSE

crossing(!!! mget(as.character(vector1[[1]])))

或者使用
base R
expand.grid

expand.grid(mget(vector1[[1]]))
crossing(!!! mget(as.character(vector1[[1]])))
expand.grid(mget(vector1[[1]]))