首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用as.formula“向后”

使用as.formula“向后”
EN

Stack Overflow用户
提问于 2022-01-24 16:19:26
回答 1查看 49关注 0票数 2

我试图在脚本中的数据帧上运行wilcox测试,而不必在运行脚本之前手动键入所有要比较的变量。

到目前为止,as.formula函数似乎只定义了我要检查的许多变量中的第一个,这样如果我输入:

代码语言:javascript
复制
n <- names(df)
f <- as.formula(paste(n[!n %in% "cluster"], paste("~ cluster", collapse = " + ")))
f

我得到了第一个变量~集群,错误是:

代码语言:javascript
复制
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测试,我将得到适当的输出。我只是试着定义它们,而不是手动地去做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-24 16:34:16

如果你不是有意:

代码语言:javascript
复制
as.formula(paste(paste(setdiff(n, 'cluster'), collapse=' + '), '~ cluster'))
# x1 + x2 + x3 ~ cluster

您可以使用lapplysetdiff

代码语言:javascript
复制
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>

稍后,把列表划分出来,

代码语言:javascript
复制
wilcox.test(foo[[1]], data)

甚至:

代码语言:javascript
复制
lapply(foo, \(f) wilcox.test(f, data))

注:R >= 4.1已使用。

数据:

代码语言:javascript
复制
n <- c(paste0('x', 1:3), 'cluster')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70837021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档