【发布时间】:2021-10-23 05:48:36
【问题描述】:
我有这个包含不同数据帧的数据帧列表。
df_list <- list(
`1.3.A` =
tibble::tribble(
~Person, ~Height, ~Weight,
"Alex", 175L, 75L,
"Gerard", 180L, 85L,
"Clyde", 179L, 79L,
"Alex", 175L, 75L,
"Gerard", 180L, 85L,
"Clyde", 179L, 79L
),
`2.2.A` =
tibble::tribble(
~Person, ~Height, ~Weight,
"Alex", 175L, 75L,
"Gerard", 180L, 85L,
"Clyde", 179L, 79L,
"Alex", 175L, 75L,
"Gerard", 180L, 85L,
"Clyde", 179L, 79L
),
`1.1.B` =
tibble::tribble(
~Person, ~Height, ~Weight,
"Alex", 175L, 75L,
"Gerard", 180L, 85L,
"Clyde", 179L, 79L,
"Alex", 175L, 75L,
"Gerard", 180L, 85L,
"Clyde", 179L, 79L
)
)
我试图做的是测试组间方差的同质性(在这种情况下是人)。但是经过几次管道 lapply() 与 leveneTest() 的试验后,我的代码显示了两个不同的结果。
这个特定的代码有效并给了我想要的结果。
ht <- function(df){
leveneTest(df$Height ~ df$Person)
}
final_ht <- lapply(df_list, ht)
但是,对于这段代码
wood <- lapply(df_list, function(i) ~leveneTest(y = Height, group = Person, data = i))
会给出显示<environment: 0x55869b4289b8>的结果
我不知道为什么wood 中的函数没有返回或运行 leveneTest。
两个代码中的lapply() 发生了什么?
有人可以告诉我lapply() 在这两种情况下都做了什么吗?
另外,在代码ht 中它会返回一个警告,这样可以吗?
In leveneTest.default(y = y, group = group, ...) :
group coerced to factor. Error in cat("1: In leveneTest.default(y = y,
group = group, ...) : group coerced to factor.", :
argument 2 (type 'list') cannot be handled by 'cat'
非常感谢任何帮助。
【问题讨论】:
-
不要使用
function(i) ~leveneTest(..),您正在混合基本 R 和rlang/purrr波浪号函数的概念(它们不兼容)。删除波浪号,只需使用function(i) leveneTest(...)。 -
仅供参考,
~返回一个公式/表达式,其中存储了调用表达式的环境,这就是您看到<environment:...>的原因。 -
对不起,我是 R 新手。
~在基础 R 和purrr中做了什么?这是否意味着我不能将基本 R 与其他库混合?还是不能将两个库混合在一起? -
您通常可以混合库,但基本 R 不使用
rlang的~-function 语法。最接近的是 R-4.1 新引入的\(x) somefunc(x)以缩短function(x) somefunc(x)一些,几乎完全用于代码高尔夫(更少字符)目的。