Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For循环返回最后一个结果_R_For Loop - Fatal编程技术网

For循环返回最后一个结果

For循环返回最后一个结果,r,for-loop,R,For Loop,我有少量的csv文件,每个文件包含两列数值。我想写一个for循环,读取文件,对列求和,并将每个csv的总和存储在一个数字向量中。这是我最近的一次: allfiles <- list.files() for (i in seq(allfiles)) { total <- numeric() total[i] <- sum(subset(read.csv(allfiles[i]), select=Gift.1), subset(read.csv(allfiles

我有少量的csv文件,每个文件包含两列数值。我想写一个for循环,读取文件,对列求和,并将每个csv的总和存储在一个数字向量中。这是我最近的一次:

allfiles <- list.files()
for (i in seq(allfiles)) {
     total <- numeric()
     total[i] <- sum(subset(read.csv(allfiles[i]), select=Gift.1), subset(read.csv(allfiles[i]), select=Gift.2))
     total
}
我的结果是所有NA为最后一个文件保存一个值。我知道每次for循环执行时我都会覆盖每个迭代,我想*我需要做一些索引工作

allfiles <- list.files()
total <- numeric()
for (i in seq(allfiles)) {
 total[i] <- sum(subset(read.csv(allfiles[i]), select=Gift.1), subset(read.csv(allfiles[i]), select=Gift.2))
}
 total
如果可能的话,试着在手前给出一个已知的总长度,即总长度
如果可能的话,试着在拿到之前给总数一个已知的长度,即total第一个问题是,您没有预先分配正确的total长度,或者没有正确地附加到total。不管怎样,我反对这种方法

有几种方法可以做到这一点,但我的术语R-onic基于。。。我知道,基于向量/列表的流程不太顺畅

alldata <- sapply(allfiles, read.csv, simplify = FALSE)
totals <- sapply(alldata, function(a) sum(subset(a, select=Gift.1), subset(a, select=Gift.2)))

第一个问题是您没有预先分配正确的长度或正确地附加到total。不管怎样,我反对这种方法

有几种方法可以做到这一点,但我的术语R-onic基于。。。我知道,基于向量/列表的流程不太顺畅

alldata <- sapply(allfiles, read.csv, simplify = FALSE)
totals <- sapply(alldata, function(a) sum(subset(a, select=Gift.1), subset(a, select=Gift.2)))


谢谢你的快速回复,Onyanbu。这可能是最基本的,但是设置对象的长度相对于for循环有什么作用呢?我按照你的建议设置了长度,结果都是0.000,除了最后一个文件,它给了我一个值。如果这回答了你的问题,你可以继续接受它以结束这个问题。你也可以投票。感谢您dnstnrmsy,有两件事:1您每次通过循环都会覆盖total,因此您会丢失以前的所有信息,因此total Thanks@r2evans至少已经回答了您向Hanks询问的问题,请尽快回复Onyanbu。这可能是最基本的,但是设置对象的长度相对于for循环有什么作用呢?我按照你的建议设置了长度,结果都是0.000,除了最后一个文件,它给了我一个值。如果这回答了你的问题,你可以继续接受它以结束这个问题。你也可以投票。感谢您dnstnrmsy,有两件事:1您每次通过循环都会覆盖total,因此您会丢失所有以前的信息,因此total Thanks@r2evans至少已经回答了您向Hanks提出的问题,感谢他们深思熟虑的回答r2evans。并再次感谢您的实际建议;完全有道理。就我个人的理解而言,设置长度对For循环有什么作用?正如上面Onyanbu所建议的,我设置了长度,而不是最后一个文件的NAs和值,我得到了0.000s和最后一个文件的值。感谢深思熟虑的回复,r2evans。并再次感谢您的实际建议;完全有道理。就我个人的理解而言,设置长度对For循环有什么作用?正如上面Onyanbu所建议的,我设置了长度,而不是最后一个文件的NAs和值,我得到了0.000s和最后一个文件的值。DnstnRmsy,如果其中任何一个答案满足您的需要,则习惯于打开,因此通过选择左边的复选标记来接受答案。它不仅对帮助过你的人表示感谢和赞扬,还有效地将你以后遇到的任何类似问题标记为已结束/已解决。10-4,r2Evans。再次感谢你的帮助!r2Evans,我只能接受一个答案吗?您只能接受一个答案,即使多个答案满足您的需要,这就是StackExchange的工作原理。您可以向上投零票或更多票,也就是说,如果您喜欢全部,那么您可以向上投所有票。DnstnRmsy,如果其中一个答案满足您的需要,则通常会选择答案左侧的复选标记来接受答案。它不仅对帮助过你的人表示感谢和赞扬,还有效地将你以后遇到的任何类似问题标记为已结束/已解决。10-4,r2Evans。再次感谢你的帮助!r2Evans,我只能接受一个答案吗?您只能接受一个答案,即使多个答案满足您的需要,这就是StackExchange的工作原理。你可以向上投零票或更多票,这意味着如果你喜欢所有人,那么你可以向上投所有人。