首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用purrr & modify_if替换嵌套的ifelse

是一种函数式编程的技巧,可以简化代码并提高可读性。purrr是R语言中的一个包,提供了一组函数,可以方便地对列表和向量进行操作。

在R语言中,ifelse函数可以用于根据条件进行向量化的选择。然而,当需要嵌套多个ifelse语句时,代码会变得冗长且难以维护。这时可以使用purrr包中的modify_if函数来替代嵌套的ifelse。

modify_if函数接受一个列表或向量作为输入,然后根据条件对其中的元素进行修改。它的参数包括待修改的列表或向量、条件函数和修改函数。条件函数用于判断是否需要对元素进行修改,修改函数用于对满足条件的元素进行修改。

下面是一个示例代码:

代码语言:txt
复制
library(purrr)

# 创建一个包含多个ifelse嵌套的列表
nested_ifelse <- list(
  a = 1,
  b = list(
    c = 2,
    d = list(
      e = 3,
      f = 4
    )
  )
)

# 定义条件函数和修改函数
condition <- function(x) is.numeric(x)
modify <- function(x) x * 2

# 使用modify_if替换嵌套的ifelse
result <- modify_if(nested_ifelse, condition, modify)

print(result)

在上面的示例中,我们创建了一个包含多个ifelse嵌套的列表nested_ifelse。然后,我们定义了一个条件函数condition,用于判断元素是否为数值类型,以及一个修改函数modify,用于将满足条件的元素乘以2。最后,我们使用modify_if函数对nested_ifelse进行修改,并将结果保存在result中。

使用purrr & modify_if替换嵌套的ifelse可以使代码更加简洁和易于理解。它适用于任何需要对列表或向量进行条件修改的场景,例如数据清洗、特征工程等。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

优雅替换掉代码中ifelse

场景 平时我们在写代码时,需要针对不同情况处理不同业务逻辑,用得最多就是if和else。...但是如果情况太多,就会出现一大堆“if else”,这就是为什么很多遗留系统中,一个函数可能出现上千行代码。...,带营销字样短信不让发送,则营销类短信需要使用其他短信渠道来发送; 也有可能某个短信平台服务挂了暂时不可用,需要切换到另一个短信渠道; 某些短信平台有优惠,则需要临时切换到该短信渠道发送短信; …...代码实现 上面的业务场景简单来说就是:针对不同短信渠道来调用对应短信平台接口实现短信发送。...我们通过使用spring依赖注入进一步优化代码: 优化代码2 SmsChannelService 接口增加 getChannelType() 方法,这一步很关键。

1.1K50

R 数据整理(十一: 用purrr包实现更花样匿名函数使用

感觉purrr函数非常像py 中匿名函数相关函数。 而功能上,其起到作用更像是简化和丰富了apply 家族函数调用。...JSON、YAML等格式转换为R对象就经常具有这种嵌套结构。一般这种类型数据,导入R 后就表现为嵌套列表格式,也就是列表中每个元素也都是列表。...median(.) else .) > d1 x1 x2 sex 1 -6 -4 M 2 1 8 F 3 2 -1 M 4 -1 1 F purrr包还提供了一个modify_if...()函数, 可以对满足条件列进行修改,如: > d2 <- modify_if(d2, is.numeric, ~ .x - median(.x)) > > d2 x1 x2 sex 1 -6...那么对于ifelse,是不是可以增加参数,如果对于复杂内容,就不用一层层套娃了。

2.5K30
  • R-Purrr使用,加速数据处理

    R-Purrr使用,加速数据处理 Tidyverse中包含一个purrr程序包,之前在看数据处理分析时候,一直看到别人code中,涵盖purrr,map函数,但是一直不知道这个是干什么,现在发现purrr...Purrr 主要是替换for循环使用Purrr引入了map函数以及一些用于操纵list新函数。cheatsheet可以速查一些关于Tidyverse使用方法。...在了解purrr之前,需要掌握一些关于Tidyverse基础。 关于Purrr教程可以参考詹妮·布赖恩(Jenny Bryan)教程。 珍妮教程很棒,但比我要教程长得多。需要耐心学些。...这篇文章是快速教你使用purrr。 因为Purrr操作对象基本上都是关于list,所以对R基本Number,Vector,dataframe及list又个了解。...匿名函数是一个临时函数(您定义为映射function参数)。 在这里,我使用了参数名称.x,但我可以使用任何参数。

    69320

    聊聊多层嵌套json值如何解析替换

    今天就来聊下多层嵌套json值如何解析或者替换多层嵌套json解析1、方法一:循环遍历+利用正则进行解析这种做法相对常规,且解析比较繁琐。...OGNL本身并不提供直接执行环境,它是作为一个库或框架一部分来使用。因此,OGNL执行方式取决于使用上下文。一般情况下,OGNL可以通过两种方式执行:解释执行和编译执行。...官网:https://commons.apache.org/proper/commons-ognl/language-guide.html我们经常使用ORM框架mybatis动态sql解析,它实现基石就是...,那个悬念做法就是将json与对象映射起来,通过对象来取值4、方法四:先自己发散下,然后看下总结总结本文多层嵌套json解析和替换都提供了几种方案,综合来讲是推荐将json先转对象,通过对象操作。...对json替换,推荐使用自定义json序列化注解方式。但这种方式比较适合json结构以及字段是固定方式。

    1.4K30

    mybatis嵌套查询使用

    大家好,又见面了,我是你们朋友全栈君 在使用mybatis时,当我们遇到表与表之之间存在关联时候,就可以使用嵌套查询 比如说 当一个对象包含了另一个对象 /** * 公交实体类中包含了司机信息和路线信息...String topenString; private String tcloseString; //省略封装方法 } 当一个对象中包含了另外一个对象时,在resultMap中就可以使用嵌套查询...附上一个查询结果debug 从图中也是可以看出Bus中Way对象是有数据,并且Way中泛型集合stations也是有数据,这是因为子查询中结果集也配置了嵌套查询,所以相对于嵌套了两次...~ 如果使用多个嵌套需要额外注意,在多对多情况下,切勿嵌套死循环了,不然就尴尬了~233 需要嵌套对象还是集合就根据自己需求来了,注意单个对象是association、集合是collection...(属性在代码中有说明) 还有一个点需要注意就是:如果配置了嵌套了,在原查询语句中就不要查嵌套表了,只查原表中就行~不然就会出错——切记切记 传递多个参数 如果嵌套查询需传递多个参数 <resultMap

    2.3K20

    125-R编程19-请珍惜R向量化操作特性

    同样在[[50-R茶话会10-编程效率提升指北]] 我们举过如下例子:在计算总和、元素乘积或者每个向量元素函数变换时, 应使用相应函数,如sum, prod, sqrt, log等。...0.036 0.669 > system.time(vectorized_if_else(test001)) 用户 系统 流逝 0.434 0.020 0.572 > system.time(ifelse...这种情况下,我们也应尽量避免循环和嵌套次数。比如学习一下时间复杂度问题,亦或是算法相关内容。 4-过度向量化问题 本质上向量化操作还是空间与时间tradeoff。...Vectorization in R – Speeding up For Loops (thatdatatho.com): https://thatdatatho.com/vectorization-r-purrr...28%29%20converts%20a%20scalar%20function%20to%20a,vectorize%20functions%20would%20be%20with%20the%20purrr

    63330

    这些逻辑运算符你都使用正确了吗?

    逻辑运算是数学运算重要组成部分,但其更是计算机计算底层设置。作为一门数据处理语言,逻辑运算在R中承担着非常非常重要作用。本专题就专门为大家整理一下R语言中逻辑运算:TRUE/FALSE....all(x==0))] X1 X3 X4 X5 1 0 0 0 0 2 -1 1 2 3 示例2:purrr包(tidyverse) purrr::discard(df, ~all(....x == 0)) purrr::keep(df, ~any(.x !...注图片来自于tidyverse网站:https://www.tidyverse.org/ 示例3:自建函数 + ifelse 来自拴小林(这个确实自己被搞复杂了 ) #---生成包含全0列数据集———...stringsAsFactors = FALSE) df #自定义循环判断全0列,全0列re返回1,非返回0# re = rep(NA,dim(df)[2]) for (i in 1:dim(df)[2]){ ifelse

    1K20

    使用vbscript替换excel文件内容

    大陆内地使用是简体中文,中国台湾地区使用是繁体中文,我们将游戏中用到配置和所有需要汉化文字提供给中国台湾合作伙伴,他们翻译后再回传给我们。...,出现这种情况原因主要是在于中国台湾地区方言和大陆所使用描述不一样。...最初想法是觉得很简单,只是替换而已,就想用php去做这件事,可到后来发现php使用phpexcel这个库对excel读取时候,遇到中文,特别是繁体中文时问题多多,基本上不能读取完一个文件夹下excel...,以及循环再去替换内容然后写入内容操作。...下一步是要优化这个工具,因为以后它会被经常用到,先放一下工具大致实现(使用是hta,可以本地直接运行) <!

    2K20

    如何使用FME完成值替换?

    为啥要替换值? 替换原因有很多。比如,错别字纠正;比如,数据清洗;再比如,空值映射。 如何做? 我们使用FME来完成各种替换,针对单个字符串,可以使用StringReplacer转换器来完成。...StringReplacer转换器是一个功能强大转换器,通过这个转换器,可以很方便完成各种替换,甚至是将字段值映射为空。...替换结果是ok,成功将空格映射成了字符串: ? 运行结果 ?...NullAttributeMapper转换器 但实际数据有多个字段,拿到后进行测试,发现StringReplacer不行,所以我尝试了如下图所示转换器,结果是ok: ? 运行结果 ?...总结 StringReplacer转换器,适用于单个字段指定值映射。在进行多个字段替换为指定值时候没什么问题,但是在正则模式启用分组情况下,就会出错。

    4.7K10

    使用Tensorflow实现数组部分替换

    简单描述一下场景:对于一个二维整型张量,假设每一行是一堆独立数,但是对于每一行数,都有一个设定好最小值。...我们需要做是,对于每一行,找到第一次小于最小值位置,并将该位置起直到行末部分数字替换为0。是不是有点抽象?...对于其他两行来说也是一样操作。 看似很简单?以下实现方案可能比较笨重,如果大家有更好方法,欢迎留言或者私信微信(sxw2251),咱们一起交流!...这里,我们首先判断每个位置数是否小于最小值,如果小于最小值,返回1,大于等于最小值,返回0,那么使用arg_max函数就可以返回第一个小于最小值位置索引: x = tf.tile(tf.reshape...]] 可以看到,前两行结果是对,但是第三行结果是错,这时候就需要我们刚才得到辅助条件对结果进行修正了: result = tf.where(index<x,choose,tf.zeros_like

    3.7K20

    使用 OpenCV 替换图像背景

    业务背景 在我们某项业务中,需要通过自研智能硬件“自动化”地拍摄一组组手机照片,这些照片有时候因为光照因素需要考虑将背景颜色整体替换掉,然后再呈现给 C 端用户。这时就有背景替换需求了。...技术实现 使用 OpenCV ,通过传统图像处理来实现这个需求。 方案一: 首先想到使用 K-means 分离出背景色。...大致步骤如下: 将二维图像数据线性化 使用 K-means 聚类算法分离出图像背景色 将背景与手机二值化 使用形态学腐蚀,高斯模糊算法将图像与背景交汇处高斯模糊化 替换背景色以及对交汇处进行融合处理...背景替换效果.png 方案二: 方案一算法并不是对所有手机都有效,对于一些浅色、跟背景颜色相近手机,该算法会比较无能为力。 ?...相近颜色替换背景效果.png 于是换一个思路: 使用 USM 锐化算法对图像增强 再用纯白色图片作为背景图,和锐化之后图片进行图像融合。 图像锐化是使图像边缘更加清晰一种图像处理方法。

    2.3K30
    领券