R 循环太快,无法读取.csv
我编写了一个循环,读取csv文件并将其重新绑定R 循环太快,无法读取.csv,r,for-loop,read.csv,R,For Loop,Read.csv,我编写了一个循环,读取csv文件并将其重新绑定 vec1 = c(0,1,3,5,9) vec2 = c("mom", "dad") c = data.frame() for(i in length(vec1)) { for (j in length(vec2)) { dir = paste("../data/year ", vec1[i], "/ff_", vec2[j], "_cb", vec1[i], ".csv", sep="") a = read.csv(di
vec1 = c(0,1,3,5,9)
vec2 = c("mom", "dad")
c = data.frame()
for(i in length(vec1))
{
for (j in length(vec2))
{
dir = paste("../data/year ", vec1[i], "/ff_", vec2[j], "_cb", vec1[i], ".csv", sep="")
a = read.csv(dir)
Sys.sleep(3)
c = rbind(c,a)
}
}
然而,当我尝试执行它时,只有上一次迭代的结果存在。(即,a
具有上一次迭代的值,c
与a
相同)
我认为这是因为循环太快了,它不会等到read.csv完成后再进入下一个循环。因此,我在里面放了一个sys.sleep(3)
然而,同样的问题依然存在。此外,我可以手动设置I
,j
,以完成此任务,因此语法应该是正确的,但我不知道问题出在哪里
谢谢 您的循环不正确<代码>for(长度为i(vec1))将只执行一次迭代。正确的格式是:
for(i in 1:length(vec1))
例如,尝试以下方法:
vec1 = c(0,1,3,5,9)
vec2 = c("mom", "dad")
for(i in 1:length(vec1))
{
for (j in 1:length(vec2))
{
print(paste(i, j))
}
}
然后用你的陈述重复这个例子。正如他们在回答中指出的,你的循环是不正确的。虽然他们的答案是正确的,但如果vec1
或vec2
是零长度向量,最好使用seq_。例如:
vec1 <- integer()
vec2 <- c("mom", "dad")
for(i in 1:length(vec1))
{
for (j in 1:length(vec2))
{
print(paste(vec1[i], vec2[j]))
}
}
#[1] "NA mom"
#[1] "NA dad"
#[1] " mom"
#[1] " dad"
在这种特定情况下,您甚至不需要整数迭代器。您可以简单地在向量元素本身上循环
vec1 <- c(0, 1)
vec2 <- c("mom", "dad")
for(v1 in vec1)
{
for (v2 in vec2)
{
print(paste(v1, v2))
}
}
# [1] "0 mom"
# [1] "0 dad"
# [1] "1 mom"
# [1] "1 dad"
那是一个令人尴尬的错误。谢谢。谢谢你的详细解释和提示。但我只能接受一个答案>。很抱歉。
vec1 <- c(0, 1)
vec2 <- c("mom", "dad")
for(v1 in vec1)
{
for (v2 in vec2)
{
print(paste(v1, v2))
}
}
# [1] "0 mom"
# [1] "0 dad"
# [1] "1 mom"
# [1] "1 dad"