堆高车
我目前有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。但是,我不确定该如何做。任何帮助将非常感激。谢谢。
答案 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
并将x
和y
用作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")))