1

我几乎是 R 的初学者,所以如果我听起来很愚蠢,请原谅我。这是我的情况:

我为 10 项测试模拟了 960 种不同的回复模式。它们以 .txt 格式成对存储在我的目录中,因此有 480 对文本文件。它们被命名为:x_a_b_c_d 或 y_a_b_c_d 其中 a、b、c 和 d 是数字。a 介于 1 和 3 之间,b 和 c 介于 1 和 4 之间,d 介于 1 和 10 之间。我需要从目录中调用每一对,将它们转换为频率表并将它们等同起来。我可以一一做到这一点:

首先,我从目录中调用一对并将它们转换为具有freqtab()功能的频率表(因为equate()仅适用于它们)。

path1<-"directory//x_1_1_1_1.txt"
x1<-(read.table(path1, header=TRUE))
ftx1<-freqtab(x1, items = list(1:10, 9:10), scales = list(0:10, 0:2))

path2<-"directory//y_1_1_1_1.txt"
y1<-(read.table(path2, header=TRUE))
fty1<-freqtab(y1, items = list(1:10, 9:10), scales = list(0:10, 0:2))

然后我将它们等同于:

eq1<- equate(ftx1, fty1, type="linear", method="levine", ws=1)$conc$yx

但是,我需要对所有的一对一一进行。那么有什么方法可以将 .txt 文件成对调用并将它们等同于一个函数?

4

1 回答 1

0

我不知道equate,所以我将从通用数据处理的角度回答。

xfiles <- list.files(path = "some_directory", pattern = "^x.*", full.names = TRUE)
yfiles <- gsub("^x", "y", xfiles)
bothexist <- file.exists(xfiles) & file.exists(yfiles)
xdata <- lapply(xfiles[bothexist], function(fn) {
  freqtab(read.table(fn, header = TRUE), items = list(1:10, 9:10), scales = list(0:10, 0:2))
})
ydata <- lapply(yfiles[bothexist], function(fn) {
  freqtab(read.table(fn, header = TRUE), items = list(1:10, 9:10), scales = list(0:10, 0:2))
})
eq <- Map(function(x,y) equate(x, y, type="linear", method="levine", ws=1)$conc$yx,
          xdata, ydata)
于 2019-07-29T00:33:47.377 回答