【发布时间】:2018-02-14 13:58:22
【问题描述】:
我需要编写循环,其中每次迭代都有一组唯一的变量值。这不是一个嵌套循环“for each i do (for each j do)”类型的问题。下面只是一个示例问题,循环在做什么并不重要,它能够为循环的每次迭代使用多个变量。
简单循环:
df <- data.frame(num = 1:5)
lookup <- data.frame(colors = c("red", "green", "blue"),
pets = c("cat", "dog", "rabbit"),
stringsAsFactors = FALSE)
for (color in lookup$colors) {
df[, color] <- 1
}
我想做什么(伪代码):
for (color, pet in lookup$colors, lookup$pets) {
df[, color] <- pet
}
我想出的最佳方法如下,但额外的 r[" "] 使代码更难阅读:
for (i in 1:nrow(lookup)) {
r <- unlist(lookup[i, ])
df[, r["colors"]] <- r["pets"]
}
df
num red green blue
1 1 cat dog rabbit
2 2 cat dog rabbit
3 3 cat dog rabbit
4 4 cat dog rabbit
5 5 cat dog rabbit
我想知道解决此类问题的最佳通用方法是什么。在许多情况下,您可以将循环替换为要为每组变量调用的函数,但函数在某些情况下并不适用。
【问题讨论】:
-
你想要
df[lookup$colors] <- lookup$pets[col(df[lookup$colors])]这个吗? -
我不确定这是如何工作的?它不适合我。但我正在寻找一种通用的方法——这似乎不是。
-
根据您的示例,它对我有用并且也可以概括(尽管不清楚您的意思是哪种概括)您是否试图用相应的'填充'颜色'列宠物?
-
你能显示你的预期输出吗
-
是的,但这只是一个示例(可能具有误导性)。我正在寻找在循环中使用多个变量的最佳方法。使用您可以执行的功能:
myfunc <- function(color, pet) { do something with vars },然后为不同的变量集多次调用它,例如myfunc("red", "dog"); myfunc("blue", "cat")等。我希望能够做类似的事情,但 for 循环,其中函数不能总是使用。