【问题标题】:Writing a list into a .dat in R using write.table使用 write.table 将列表写入 R 中的 .dat
【发布时间】:2021-06-24 11:44:01
【问题描述】:

我正在尝试将此循环产生的数字列表写入文件。 我使用下面的代码已经能够做到这一点,但输出并不完全是我想要的。 我知道我需要使用 write.table 并且需要将其保存为 .dat

谁能告诉我为什么“x”在每行之间打印? **我在文件中得到的内容:**
x
1800
x
1804
x
1808
x
等等...

我想要什么:
1804
1808
1812
等等...

years <- seq(1800,2020)

for (i in years){
  i_div_400 <- i%%400
  if (i_div_400 == 0 & (i%%4 == 0 && i%%100 != 0)){
    write.table(i, "file.dat", append=TRUE, sep=",", quote=FALSE)  
  }
}

【问题讨论】:

  • 你确定这是你得到的输出吗? i_div_400 == 0 每 400 年才成立一次。它不应该写任何东西。但是write.table 期望编写一个带有列名等的data.frame。如果您只想写一个文字值,请考虑使用writeLines()。此外,在实际写入之前生成要写入的值列表会更有效。
  • 对不起,你是对的,我之前发错了单元格。我用正确的代码编辑了帖子
  • 当您不在任何地方使用leap 时,为什么还要使用leap &lt;- matrix(i)?我也不明白为什么当if 条件中的代码完全相同时,你有两个单独的if 条件。
  • 该矩阵应该已被注释掉。 if 不是一行

标签: r list file for-loop write.table


【解决方案1】:

您在输出中得到“x”的原因是因为这是使用write.table 时的默认列名。如果您不想在输出中包含列名,请使用col.names = FALSE,它只会在输出中打印数字。

years <- seq(1800,2020)

for (i in years){
  i_div_400 <- i%%400
  if (i_div_400 == 0 || (i%%4 == 0 && i%%100 != 0)){
    write.table(i, "file.dat", append=TRUE, sep=",", 
               row.names=FALSE, quote=FALSE, col.names = FALSE)  
  }
}

这也可以用向量化的方式编写,无需循环。

write.table(years[years %% 400 == 0 | (years %% 4 == 0 & years %%100 != 0)], 
          "file.dat", sep=",", row.names=FALSE, quote=FALSE, col.names = FALSE)  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2011-03-22
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多