我试图在脚本中的数据帧上运行wilcox测试,而不必在运行脚本之前手动键入所有要比较的变量。
到目前为止,as.formula函数似乎只定义了我要检查的许多变量中的第一个,这样如果我输入:
n <- names(df)
f <- as.formula(paste(n[!n %in% "cluster"], paste("~ cluster", collapse = " + ")))
f我得到了第一个变量~集群,错误是:
Using formula(x) is deprecated when x is a character vector of length > 1.
Consider formula(paste(x, collapse = " ")) instead.我想知道是否有人知道如何在“反向”中运行这个程序,这样我就可以在一个函数中得到所有的变量~集群。如果我手动输入它们(formula = c(x1, x2, x3 ...) ~ cluster)并运行wilcox测试,我将得到适当的输出。我只是试着定义它们,而不是手动地去做。
发布于 2022-01-24 16:34:16
如果你不是有意:
as.formula(paste(paste(setdiff(n, 'cluster'), collapse=' + '), '~ cluster'))
# x1 + x2 + x3 ~ cluster您可以使用lapply和setdiff。
foo <- lapply(setdiff(n, 'cluster'), \(x) as.formula(paste(x, '~ cluster')))
foo
# [[1]]
# x1 ~ cluster
# <environment: 0x55b1ca157078>
#
# [[2]]
# x2 ~ cluster
# <environment: 0x55b1ca159708>
#
# [[3]]
# x3 ~ cluster
# <environment: 0x55b1ca1eed50>稍后,把列表划分出来,
wilcox.test(foo[[1]], data)甚至:
lapply(foo, \(f) wilcox.test(f, data))注:R >= 4.1已使用。
数据:
n <- c(paste0('x', 1:3), 'cluster')https://stackoverflow.com/questions/70837021
复制相似问题