【发布时间】:2015-07-28 12:51:06
【问题描述】:
list1 = c("X", "Y")
list2 = c("1", "2", "3")
我想要的是
c("X1", "X2", "X3", "Y1", "Y2", "Y3")
我该怎么做?有可能对此有一个包吗?我尝试了paste(),但它交替混合了条目(“X1、“Y2”、“X3”)。
【问题讨论】:
list1 = c("X", "Y")
list2 = c("1", "2", "3")
我想要的是
c("X1", "X2", "X3", "Y1", "Y2", "Y3")
我该怎么做?有可能对此有一个包吗?我尝试了paste(),但它交替混合了条目(“X1、“Y2”、“X3”)。
【问题讨论】:
我们可以在vectors 上使用expand.grid 或outer 来获得所有组合,然后我们将paste 一起使用。
使用expand.grid,输出是一个有两列的data.frame,我们可以使用do.call(paste0粘贴输出数据集的每一行。
v1 <- do.call(paste0,expand.grid(list1, list2))
v1[order(v1)]
#[1] "X1" "X2" "X3" "Y1" "Y2" "Y3"
或者如上所述outer 是另一个选项,对于此操作应该非常快。输出将是matrix,可以使用as.vector 或c 将其转换回vector。
c(t(outer(list1, list2, FUN=paste0)))
#[1] "X1" "X2" "X3" "Y1" "Y2" "Y3"
另外,expand.grid 应该与 list 一起使用
list1 <- as.list(list1)
list2 <- as.list(list2)
do.call(paste0, expand.grid(list1, list2))
#[1] "X1" "Y1" "X2" "Y2" "X3" "Y3"
【讨论】:
expand.grid 的东西。我总是手动操作rep...
expand.grid 是一个有用的功能。假设我们有一个包含许多元素的列表。只做list1 <- list(LETTERS[1:3], LETTERS[4:5], LETTERS[6:7]); expand.grid(list1) 将获得所有可能的组合。
rep! 来练习我的算术怎么办?
expand.grid。在这种情况下,rep 是选项
list1 = c("X", "Y")
list2 = c("1", "2", "3")
as.character(sapply(list1, FUN = function(x) paste0(x, list2)))
# [1] "X1" "X2" "X3" "Y1" "Y2" "Y3"
【讨论】:
c(sapply(list1, paste0, list2))压缩它
... 或*apply 将参数传递给FUN 的可能性。除了偷懒,在这种情况下c比as.character好还有什么原因?
as.vector 会更正确。但是,我只是想编写高尔夫代码 :-)。