遍历向量(不要遍历向量中的元素)

时间:2019-06-14 10:49:11

标签: r loops vector

堆高车

我目前有2个向量

x <- 1:2
y <- 3:4

我想做类似的事情

for (i in c("x","y"))
{
  i <- data.frame(i)
  i$flag <- ifelse(i == "x", 1, 0)  # just a flagging field
}

我显然是错误地指x和y。但是,我不确定该如何做。任何帮助将非常感激。谢谢。

2 个答案:

答案 0 :(得分:4)

如果我对您的理解是正确的,并且希望遍历整个矢量而不是矢量元素,则可以将矢量放入列表中,然后遍历列表。

像这样:

x <- c(1:10)
y <- c(11:20)

for (item in list(x, y)) {
    # your code
}

编辑(在您澄清之后):

如果要将两个向量都转换为data.frames,这同样简单。首先,将两个向量都放入列表中,然后在循环中对其进行修改:

x <- c(1:10)
y <- c(11:20)
list_of_vectors <- list(x, y)

for (i in seq_along(list_of_vectors)) {
    list_of_vectors[[i]] <- as.data.frame(list_of_vectors[[i]])
}

不过,更糟的解决方案是使用lapply

x <- c(1:10)
y <- c(11:20)
list_of_vectors <- list(x, y)
list_of_vectors <- lapply(list_of_vectors, as.data.frame)

答案 1 :(得分:1)

您可以使用Map并将xy用作list参数,并将字符"x""y"用作另一个参数。这将为您提供两个单独的数据框的列表

Map(function(x, y) data.frame(x, y = as.integer(y == "x")), list(x, y), c("x", "y"))

#[[1]]
#  x y
#1 1 1
#2 2 1

#[[2]]
#  x y
#1 3 0
#2 4 0

或者也许只与lapply

lst <- list(x = x, y = y)
lapply(seq_along(lst), function(x) 
       data.frame(x = lst[[x]], y = as.integer(names(lst)[x] == "x")))