R for循环计算wilcox.test
R for loop to calculate wilcox.test
我正在尝试编写一个代码来自动计算 Wilcoxon 检验的 p 值以进行多次比较。
使用的数据:2 个具有相同信息的数据集代表两组参与者完成了相同的 5 个任务,这意味着每个 table 包含 5 列(任务)和 X 行任务分数。
data_17_18_G2 # first data set (in data.table format)
data_18_20_G2 # second data set (in data.table format)
两个数据集都具有相同的列名,这些列名将在接下来的 W 检验中使用:
wilcox.test(Group1Task1, Group2Task1, paired = F)
wilcox.test(Group1Task2, Group2Task2, paired = F)
等等。
输入(例如,Grou1Task1)是任务得分的两个向量(第一个来自 data_17_18_G2,另一个来自 data_18_20_G2
所需输出:数据 table 包含一列 p 值
我面临的问题是,无论我如何操作 val1 和 val2 空对象,在第二行和第三行中,正确的大小 "as.numeric(unlist(data_17_18_G2[, ..i]))" 给出了正确的输出(数字向量),但它的大小为左 "val1[i]" 总是 returns 向量中只有一个值。这让我想到主要问题出现在创建空向量的步骤上,但是,我无法解决它。
空对象:
result <- data.table(matrix(ncol=2))
val1 <- as.numeric() # here I also tried functions "numeric" and "vector"
val2 <- as.numeric()
res <- vector(mode = "list", length = 7)
For循环
for (i in 1:5) {
val1[i] <- as.numeric(unlist(data_17_18_G2[ , ..i]))
val2[i] <- as.numeric(unlist(data_18_20_G2[ , ..i]))
res[i] <- wilcox.test(val1[i], val2[i], paired = F)
result[i, 1] <- i
result[i, 2] <- res$p.value
}
输出:
Error in `[<-.data.table`(`*tmp*`, i, 2, value = NULL) :
When deleting columns, i should not be provided
1: В val1[i] <- as.numeric(unlist(data_17_18_G2[, ..i])) :
number of items to replace is not a multiple of replacement length
2: В val2[i] <- as.numeric(unlist(data_18_20_G2[, ..i])) :
number of items to replace is not a multiple of replacement length
3: В res[i] <- wilcox.test(val1[i], val2[i], paired = F) :
number of items to replace is not a multiple of replacement length
替代方案:
我改了第二行和第三行
for (i in 1:5) {
val1[i] <- as.numeric(data_17_18_G2[ , ..i])
val2[i] <- as.numeric(data_18_20_G2[ , ..i])
res[i] <- wilcox.test(val1[i], val2[i], paired = F)
result[i, 1] <- i
result[i, 2] <- res$p.value
}
得到这个
Error in as.numeric(data_17_18_G2[, ..i]) :
(list) object cannot be coerced to type 'double'
这意味着函数 wilcox.test 无法解释这种类型的输入。
如何改进代码以获得 p 值数据 table?
代码中似乎存在一些错误。我已经以汽车数据集为例重写了代码。
## use the cars dataset as a example (change with appropriate data)
data(cars)
data_17_18_G2 <- as.data.table(cars)
data_18_20_G2 <- data_17_18_G2[,2:1]
## Fixed code
result <- data.table(matrix(as.numeric(), nrow=ncol(data_17_18_G2), ncol=2))
val1 <- as.numeric()
val2 <- as.numeric()
res <- vector(mode = "list", length = 7)
for (i in 1:ncol(data_17_18_G2)) {
val1 <- as.numeric(unlist(data_17_18_G2[ , ..i]))
val2 <- as.numeric(unlist(data_18_20_G2[ , ..i]))
res[[i]] <- wilcox.test(val1, val2, paired = F)
result[i, 1] <- as.numeric(i)
result[i, 2] <- as.numeric(res[[i]]$p.value)
}
希望这能为您提供所需的输出。
我正在尝试编写一个代码来自动计算 Wilcoxon 检验的 p 值以进行多次比较。
使用的数据:2 个具有相同信息的数据集代表两组参与者完成了相同的 5 个任务,这意味着每个 table 包含 5 列(任务)和 X 行任务分数。
data_17_18_G2 # first data set (in data.table format)
data_18_20_G2 # second data set (in data.table format)
两个数据集都具有相同的列名,这些列名将在接下来的 W 检验中使用:
wilcox.test(Group1Task1, Group2Task1, paired = F)
wilcox.test(Group1Task2, Group2Task2, paired = F)
等等。 输入(例如,Grou1Task1)是任务得分的两个向量(第一个来自 data_17_18_G2,另一个来自 data_18_20_G2
所需输出:数据 table 包含一列 p 值 我面临的问题是,无论我如何操作 val1 和 val2 空对象,在第二行和第三行中,正确的大小 "as.numeric(unlist(data_17_18_G2[, ..i]))" 给出了正确的输出(数字向量),但它的大小为左 "val1[i]" 总是 returns 向量中只有一个值。这让我想到主要问题出现在创建空向量的步骤上,但是,我无法解决它。
空对象:
result <- data.table(matrix(ncol=2))
val1 <- as.numeric() # here I also tried functions "numeric" and "vector"
val2 <- as.numeric()
res <- vector(mode = "list", length = 7)
For循环
for (i in 1:5) {
val1[i] <- as.numeric(unlist(data_17_18_G2[ , ..i]))
val2[i] <- as.numeric(unlist(data_18_20_G2[ , ..i]))
res[i] <- wilcox.test(val1[i], val2[i], paired = F)
result[i, 1] <- i
result[i, 2] <- res$p.value
}
输出:
Error in `[<-.data.table`(`*tmp*`, i, 2, value = NULL) :
When deleting columns, i should not be provided
1: В val1[i] <- as.numeric(unlist(data_17_18_G2[, ..i])) :
number of items to replace is not a multiple of replacement length
2: В val2[i] <- as.numeric(unlist(data_18_20_G2[, ..i])) :
number of items to replace is not a multiple of replacement length
3: В res[i] <- wilcox.test(val1[i], val2[i], paired = F) :
number of items to replace is not a multiple of replacement length
替代方案: 我改了第二行和第三行
for (i in 1:5) {
val1[i] <- as.numeric(data_17_18_G2[ , ..i])
val2[i] <- as.numeric(data_18_20_G2[ , ..i])
res[i] <- wilcox.test(val1[i], val2[i], paired = F)
result[i, 1] <- i
result[i, 2] <- res$p.value
}
得到这个
Error in as.numeric(data_17_18_G2[, ..i]) :
(list) object cannot be coerced to type 'double'
这意味着函数 wilcox.test 无法解释这种类型的输入。
如何改进代码以获得 p 值数据 table?
代码中似乎存在一些错误。我已经以汽车数据集为例重写了代码。
## use the cars dataset as a example (change with appropriate data)
data(cars)
data_17_18_G2 <- as.data.table(cars)
data_18_20_G2 <- data_17_18_G2[,2:1]
## Fixed code
result <- data.table(matrix(as.numeric(), nrow=ncol(data_17_18_G2), ncol=2))
val1 <- as.numeric()
val2 <- as.numeric()
res <- vector(mode = "list", length = 7)
for (i in 1:ncol(data_17_18_G2)) {
val1 <- as.numeric(unlist(data_17_18_G2[ , ..i]))
val2 <- as.numeric(unlist(data_18_20_G2[ , ..i]))
res[[i]] <- wilcox.test(val1, val2, paired = F)
result[i, 1] <- as.numeric(i)
result[i, 2] <- as.numeric(res[[i]]$p.value)
}
希望这能为您提供所需的输出。