【发布时间】:2020-01-23 19:53:08
【问题描述】:
我想在类似于this question 的嵌套循环中生成一个 data.frames 列表。在第二个循环中,j 应该是 4,然后是 5,但它只运行为 5。是我的函数错误还是我使用嵌套循环的方式错误?
df=data.frame(Value=c(11,4,6,10,7,2))
exceedance_fun= function(x,y){
z=case_when(
x > y ~ "No",
x <= y ~ paste(y,"mg/L"),
TRUE ~ "unsure"
)
return(z)
}
datalist = list()
for (i in 1:2) {
for (j in 4:5) {
dat=df %>%
mutate(Vio= exceedance_fun(Value,j))
dat$i <- i
datalist[[i]] <- dat
}
}
输出不正确
[[1]]
Value Vio i
1 11 No 1
2 4 5 mg/L 1 #This should be 4 mg/L
3 5 5 mg/L 1 #This should be 4 mg/L
4 10 No 1
5 7 No 1
6 2 5 mg/L 1 #This should be 4 mg/L
[[2]]
Value Vio i
1 11 No 2
2 4 5 mg/L 2
3 5 5 mg/L 2
4 10 No 2
5 7 No 2
6 2 5 mg/L 2
【问题讨论】:
-
在这里,您将长度为 1 的向量与 >1 进行比较,并期望输出长度为 1。您是要在函数中使用
all或any进行包装吗? -
这里有一个问题:
datalist[[i]] <- dat第二次通过 j 循环,您将覆盖“datalist”中的值 -
j对4和5都运行,但由于i对两者相同,datalist[[i]] <- dat只保存最后一个。 -
如果您删除外部
for循环,您将获得预期结果