- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将 lapply 与 mutate 函数一起使用
你好,我正在尝试将 lapply 与 mutate 函数结合使用。我正在处理嵌套列表数据。
让我们举个例子。 given
是包含两个元素的嵌套列表。每个元素都是10*2的列表。
given<-replicate(2,list(matrix(unlist(replicate(10,sample(c(0.2,0.3,0.4,0.1),2,replace=FALSE),simplify=FALSE)),ncol=2)))
colnames(given[[1]])<-c('a','b')
colnames(given[[2]])<-c('a','b')
given
我会将 0.1 和 0.2 转换为“低”,0.3 转换为“中”,0.4 转换为“高”。我使用了 lapply、mutate 和 if_else 函数。
new_given<-lapply(seq_along(given), function(x){
mutate(x,
given[[x]][['new']] = if_else(given[[x]][['a']] %in% c(0.1,0.2),'low',
if_else(given[[x]][['I12']] %in% c(0.3),'middle','high')))})
然而,错误发生了。它说有一个'意外')''。但是,括号的数量是正确配对的。
> new_given<-lapply(seq_along(given), function(x){
+ mutate(x,
+ given[[x]][['new']] = if_else(given[[x]][['a']] %in% c(0.1,0.2),'low',
Error: unexpected '=' in:
" mutate(x,
given[[x]][['new']] ="
> if_else(given[[x]][['I12']] %in% c(0.3),'middle','high')))})
Error: unexpected ')' in " if_else(given[[x]][['I12']] %in% c(0.3),'middle','high'))"
>
你能告诉我问题是什么以及如何解决吗?
*附加信息:我读了这篇文章,Using lapply with mutate in R但是,它使用了 data.frame,而不是处理列表数据。所以这些方法似乎有所不同。
最佳答案
您的方法存在很多问题。首先,您得到的错误只是在第一个错误(意外的“=”)发生后复制该行的其余部分的副作用。
但是,那个 错误的原因是不同的。您正在对 x
应用 mutate。 x
是长度为 1 的数字向量。但是,mutate
仅适用于数据帧(甚至不是矩阵!)。不过,您可以先将矩阵转换为 data.frames(正如 Ronak 在另一个答案中所建议的那样)。
最后,您的矩阵是 double 矩阵。您的方法可能在大部分时间都有效,但不能保证总是有效,因为即使一个数字看起来像 0.3,它实际上也可能是 0.3000000000000000001,在这种情况下 %in% 0.3
将返回 FALSE
。现在看起来不太可能,但相信我,这种方法迟早会伤害到您,而且您不会看到它的到来。我是凭经验说的。
让我们首先创建一个函数,它接受一个矩阵,并根据它的第一列决定它应该是“低”、“中”还是“高”。
cut
函数需要多次中断,并为每个数字分配一个表示给定间隔的因子水平:
cut(given[[1]][,1], c(-Inf, 0.2, 0.3, Inf))
结果:
[1] (0.3, Inf] (-Inf,0.2] (-Inf,0.2] (0.3, Inf] (-Inf,0.2] (0.3, Inf]
[7] (-Inf,0.2] (-Inf,0.2] (0.3, Inf] (-Inf,0.2]
Levels: (-Inf,0.2] (0.2,0.3] (0.3, Inf]
我们可以直接给结果分配标签:
cut(given[[1]][,1], c(-Inf, 0.2, 0.3, Inf), labels=c("low", "mid", "high"))
我们可以把它做成一个函数:
mklevels <- function(mtx) {
cut(mtx[,1], c(-Inf, 0.2, 0.3, Inf), labels=c("low", "mid", "high"))
}
与其将矩阵转换为数据框并添加新列,不如创建一个每个矩阵一列的新数据框:
data.frame(sapply(given, mklevels))
这样做的好处是,如果矩阵很大并且用于其他计算目的,将它们更改为数据帧并不是一种有效的方法。
如果您真的非常想使用 %in%
,请将数据转换为因数。这样您就可以检查因子水平并查看是否存在问题。例如:
x <- c(0.3, 0.2, 0.3 + 1e-11, 0.1)
x
看起来很无辜:
> x
[1] 0.3 0.2 0.3 0.1
但是,x[4] %in% .3
返回 FALSE
。但将其转换为一个因素并查看级别:
factor(x)
[1] 0.3 0.2 0.30000000001 0.1
Levels: 0.1 0.2 0.3 0.30000000001
将数据转换为因子后,您就可以安全地采用 Ronak 的方法。但我绝不会尝试使用数值向量!
关于r - 如何将 lapply 与 mutate 函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57003106/
我正在尝试从许多格式不整洁的 excel 电子表格中提取一些数据。我想我需要在 lapply 内运行 lapply,但似乎无法使其工作。这是一个例子: 这是两个数据框,其格式与我在 excel 表中找
显然,我仍然不完全理解 lapply 到底是如何工作的。当然,它对列表元素应用一个函数并返回一个列表。然而,当将它与自定义函数一起使用时,我不太确定如何有效地使用它。例如,我想在使用 dcast 的自
我创建了一个名为“列表”的数据框列表,并且只想选择列表中每个数据集的某些列。 library(dplyr) new_list <- lapply(list, select(list, Date)) 它
我想使用 lapply 同时运行四个多级模型(使用 lmer)。 将 lm() 与一个因变量和一组自变量一起使用的简单示例是: data(mtcars) varlist <- names(mtcars
我编写了一个函数,可以将字符输入转换为数字输出。 votedIndicated votedIndicated("V") [1] 1 > votedIndicated("D") [1] 0 但是,当我
简介 我一直在编写一个程序来处理一些原始数据,然后通过几个统计过程来传递它。总而言之,它使用了多个“lapply”实例。 例如 :在脚本的一部分中,我使用了一个称为 Maxstat 的函数(请注意,该
我有一个 list l ,具有以下特点: 它有 3 个元素 每个元素都是一个长度为 5 的数值向量 每个向量包含从 1 到 5 的数字 l = list(a = c(2, 3, 1, 5, 1), b
我有一个功能列表 functions flist arg arg [1] 6.123234e-17 > Funcall ## Compute log(exp(acos(cos(0)) > Re
我有一个字符向量中的 url 列表,我想暂停之间的过程 查询,因为如果不是 x 查询被拒绝。 urls=c('url1','url2','url3') 这是我想做的事 htmlpages=lapply
我有一个具有以下结构的 6 个列表,我正在尝试提取特定元素并将它们存储在数据 data.frame 中。 我已经应用了这个, lapply(rmseErrorsHyperparameters, '[[
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在阅读 Wickham 的 Advanced R 书。此问题与解决第 12 章 - 泛函中的问题 5 有关。该练习要求我们: Implement a version of lapply() tha
有没有办法使用lapply()以某种方式强制它在单步执行列表的下一个元素之前等待用户的“输入”?如果是这样,你能提供一个简单的例子吗? 最佳答案 这是示例: es <- list(1, 2, 3) l
我有一个我想摆脱的循环,但我也不太明白怎么做。假设我有一个数据框: tmp = data.frame(Gender = rep(c("Male", "Female"), each = 6),
我已经生成了一个模型列表,并想创建一个汇总表。 例如,这里有两个模型: x <- seq(1:10) y <- sin(x)^2 model1 <- lm(y ~ x) model2 <- lm(y
我在对数据帧列表运行稳健的线性回归模型(使用 MASS 库中的 rlm)时遇到问题。 可重现的示例: var1 <- c(1:100) var2 <- var1*var1 df1 <- data.f
我正在清理一组文本文件,目前将它们作为具有相同结构的数据框列表进行操作。 鉴于文本文件的结构,每个 df 中最终都会有一个不规则的单元格。该单元格包含一个包含列名和值的字符串。我需要提取该值并将其分配
我有一个包含字符数据的 data.frame,我希望最终得到一个具有相同列标题但每个值都有计数的矩阵。到目前为止,我可以获得一个我想要的维度的空矩阵,但是当我尝试用计数填充 myMatrix 时,它不
如何在 lapply 中指定多行语法。我的语法也没有替换第一行中的 text_query。提前谢谢你。 text_query<-lapply(text_query, function(x) { g
您可以通过运行重置数据框中的行名 >rownames(df) newlist <- llply(mylist, function(df) { rownames(df) <- NULL }) 但 tit
我是一名优秀的程序员,十分优秀!