我开始学习 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() 中使用导入的数据之前,我是否需要以某种方式处理它? 任何见解都值得赞赏。 谢谢。
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)