R write.fwf():使用导入数据时收到错误消息

问题描述 投票:0回答:1

我开始学习 R,但我不明白从 gdata 包的 write.fwf() 收到的错误消息。 我创建了两个数据文件,其中一个使用以下代码:

testdata <- data.frame (VAR1=c(1),
                         VAR2=c(2))

另一个来自导入测试 .csv 文件:

VAR1,VAR2
1,2

我的完整代码是:

library(tidyverse)  # Loads the `tidyverse` collection
library(readxl)     # Reads CSV and Excel files
library(gdata)      # For write.fwf
testdata <- data.frame (VAR1=c(1),
                         VAR2=c(2))
read_testdata <- read_csv ("test.csv")

write.fwf(x=testdata)
write.fwf(x=read_testdata)

这两个数据框对我来说似乎相同。 当我运行

write.fwf(x=testdata)
时,函数成功返回:

> write.fwf(x=testdata)
VAR1 VAR2
1 2

但是,当我通过运行

write.fwf(x=read_testdata)
使用导入的数据版本时,我收到以下错误消息:

Error in `[<-`:
! Assigned data `format(...)` must be compatible with existing data.
✖ Existing data has 1 row.
✖ Assigned data has 4 rows.
ℹ Row updates require a list value. Do you need `list()` or `as.list()`?
Caused by error in `vectbl_recycle_rhs_rows()`:
! Can't recycle input of size 4 to size 1.
Run `rlang::last_trace()` to see where the error occurred.
Warning message:
In x2[!test] <- format(y[!test, i], justify = justify, width = tmp,  :
  number of items to replace is not a multiple of replacement length

我不明白这个错误消息的含义。 我尝试尽可能简化输入以查看两个输入的不同之处,但我仍然没有看到导致错误的原因。 在 write.fwf() 中使用导入的数据之前,我是否需要以某种方式处理它? 任何见解都值得赞赏。 谢谢。

r gdata
1个回答
0
投票

read_csv
函数将数据导入为
tibble
write.fwf
需要
data.frame

您可以尝试使用

read.csv
导入 CSV 文件,它将作为
data.frame
导入:

read_testdata2 <- read.csv("test.csv")
write.fwf(x=read_testdata2)

或者按照@margusl的建议,首先将

tibble
转换为
data.frame
:

df = as.data.frame(read_testdata)
write.fwf(x=df)

您可以通过以下方式检查对象是否具有不同的类:

class(testdata)
class(read_testdata)
© www.soinside.com 2019 - 2024. All rights reserved.