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