r - 在 R 循环中写入文件
问题描述
我正在尝试在 R 中的循环中写入文件。我想在循环中附加文件。我试过 append=true 但没有用。我已经详细解释了问题here。任何想法?感谢您的帮助:
#Initilaizing 2*2 array
Array1 <- array(0,c(2,2))
for(i in 1:5)
{
#Create 4 random numbers
Random1 <- runif(1, min=0, max=1)
Random2 <- runif(1, min=0, max=1)
Random3 <- runif(1, min=0, max=1)
Random4 <- runif(1, min=0, max=1)
#Assign Random numbers to the array
Array1[1,1] <- Random1
Array1[1,2] <- Random2
Array1[2,1] <- Random3
Array1[2,2] <- Random4
#*****This is the Question*******
# I want to keep the history for Array1 through the 5 loops by writing the array in a file.
# and appending the file as we go through the loop
# I tried write.csv with Append=true but didn't work
# How can I do this?
}
解决方案
write.table()
在这里效果更好,因为write.csv()
限制性更强,以确保始终写入有效的 CSV 文件。
write.table()
和append = TRUE
(col.names = FALSE
为了抑制列名被重复写入文件)应该可以解决问题。如果您希望分隔符为逗号,为了符合 csv 规范,您可以将其设置为sep = ","
.
这可能是这样的:
Array1 <- array(0,c(2,2))
for(i in 1:5)
{
#Create 4 random numbers
Random1 <- runif(1, min=0, max=1)
Random2 <- runif(1, min=0, max=1)
Random3 <- runif(1, min=0, max=1)
Random4 <- runif(1, min=0, max=1)
#Assign Random numbers to the array
Array1[1,1] <- Random1
Array1[1,2] <- Random2
Array1[2,1] <- Random3
Array1[2,2] <- Random4
write.table(Array1,
sep = ",",
file = "OUT1.csv",
append = TRUE,
col.names = FALSE,
row.names = FALSE)
}
如果您想避免使用 write.table() 为什么不在 R 中绑定数组,然后同时写入所有内容:
out_array <- array(numeric(), c(0,2))
for(i in 1:5)
{
Array1 <- array(dim = c(2,2))
#Create 4 random numbers
Random1 <- runif(1, min=0, max=1)
Random2 <- runif(1, min=0, max=1)
Random3 <- runif(1, min=0, max=1)
Random4 <- runif(1, min=0, max=1)
#Assign Random numbers to the array
Array1[1,1] <- Random1
Array1[1,2] <- Random2
Array1[2,1] <- Random3
Array1[2,2] <- Random4
out_array <- rbind(out_array, Array1)
}
write.csv(out_array, "OUT2.csv")
最后,对于函数式编程爱好者来说,一个解决方案可以在一个管道链中完成所有事情并使用 purrr 的映射:
library(dplyr)
library(purrr)
map(1:5, function(repeats) {
Array1 <- array(dim = c(2,2))
#Create 4 random numbers
Random1 <- runif(1, min=0, max=1)
Random2 <- runif(1, min=0, max=1)
Random3 <- runif(1, min=0, max=1)
Random4 <- runif(1, min=0, max=1)
#Assign Random numbers to the array
Array1[1,1] <- Random1
Array1[1,2] <- Random2
Array1[2,1] <- Random3
Array1[2,2] <- Random4
Array1
}) %>%
{do.call(rbind, .)} %>%
write.csv("OUT3.csv")
推荐阅读
- hibernate - Hibernate 不创建表并自动更改
- authentication - 我可以将加密令牌保存在仅 HTTP cookie 中吗?
- java - 从具有依赖关系的 jar 文件创建 docker 容器
- python - 如何用随机数制作函数
- java - driver.get(url) 与 driver.navigate().to(url);
- javascript - 引导多个文件选择 - 仅显示第一个文件
- haskell - 如何从 testDatabase 中删除 [ ]
- go - 如何检查函数参数和类型
- c++ - 与传统头文件相比,c++20 中的模块会减少编译时间吗?
- python - 如何解决“无法从'figures'导入名称'plot_2d_separator'”错误?