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

为什么基本的R` `ifelse()`会间歇性地将字符向量转换为矩阵?

基本的R ifelse() 函数是一个条件语句,用于根据条件选择性地执行不同的操作。它的语法如下:

代码语言:txt
复制
ifelse(test, yes, no)

其中,test 是一个逻辑向量,yes 是一个向量,当对应的 testTRUE 时,选择 yes 中的元素;no 是一个向量,当对应的 testFALSE 时,选择 no 中的元素。

然而,当 yesno 中的元素是字符向量时,ifelse() 函数可能会出现将字符向量转换为矩阵的情况。这是因为 ifelse() 函数在选择 yesno 中的元素时,会根据最长的向量来决定结果的长度,并将较短的向量进行重复以匹配长度。

例如,考虑以下示例:

代码语言:txt
复制
x <- c("a", "b", "c")
y <- c("d", "e")

result <- ifelse(x == "a", y, "f")

在这个例子中,x 是一个字符向量,y 是一个较短的字符向量。当 x 中的元素等于 "a" 时,选择 y 中的元素;否则选择 "f"。由于 y 的长度较短,ifelse() 函数会将 y 中的元素重复以匹配 x 的长度。因此,result 的结果将是一个矩阵,其中包含重复的 "d" 和 "e"。

要解决这个问题,可以使用 ifelse() 函数的替代方法,例如使用 ifelse() 的兄弟函数 if_else(),它来自于 dplyr 包。if_else() 函数可以正确处理字符向量的情况,而不会将其转换为矩阵。

另外,如果你在使用 ifelse() 函数时遇到了问题,可以考虑使用其他条件语句,如 if-else 语句或 case_when() 函数,它们在处理字符向量时更加稳定。

这是一个关于 ifelse() 函数的基本解释和解决方案,希望对你有帮助。如果你需要了解更多关于云计算、IT互联网领域的知识,请随时提问。

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

相关·内容

R语言常用函数速查

一、基本 1.数据管理 vector:向量 numeric:数值型向量 logical:逻辑型向量character;字符向量 list:列表 data.frame:数据框c:连接为向量或列表 length...字符串处理 character:字符向量 nchar:字符数 substr:取子串format,formatC:把对象用格式转换为字符串paste,strsplit:连接或拆分charmatch,pmatch...数组 array:建立数组 matrix:生成矩阵data.matrix:把数据框转换为数值型矩阵lower.tri:矩阵下三角部分 mat.or.vec:生成矩阵向量t:矩阵置 cbind:把列合并为矩阵...rbind:把行合并为矩阵diag:矩阵对角元素向量或生成对角矩阵aperm:数组置 nrow, ncol:计算数组行数和列数dim:对象向量 dimnames:对象维名row/colnames...,&,&&,|,||,xor():逻辑运算符logical:生成逻辑向量 all,any:逻辑向量都为真或存在真ifelse():二者择一 match,%in%:查找unique:找出互不相同元素 which

2.6K90
  • Day07 生信马拉松-数据整理中R

    (x) # 引号内单个字母/数字/符号数量 length(x) #检测向量元素数 1.2 字符串拆分 str_split(x," ") #直接拆分后会变成list子集 class(str_split...#提取x中第5和第9位字符串 str_sub(x,5,9) 1.4 字符检测 str_detect(x2,"h") # 第一个参数为向量名,第二个是检测关键词 str_starts(x2,"T")...#判断x2中T开头字符串,输出逻辑向量 str_ends(x2,"e") #判断x2中e结尾字符串,输出逻辑向量 1.5 字符串替换 x2 str_replace(x2,"o","A") #每个元素里面只替换第一次出现目标字符...近似于 %in% anti_join(test1,test2,by="name") #反连接 基本不用 6.表达矩阵画箱线图 6.1操作过程图示 step1 对matrix进行置:使gene名变为列名...dat = t(exp) %>% #matrix进行行列置 as.data.frame() %>% #matrix转为data.frame rownames_to_column() %

    23500

    生信技能树- R语言-day7

    ,根据逻辑值向量生成有两个取值字符向量ifelse() + str_detect()samples = c("tumor1","tumor2","tumor3","normal1","normal2...else2, ifelse(,,ifelse)在ifelse里加一个ifelse补充 case_when练习题1.加载deg.Rdata,根据a、b两列值,按照以下条件生成向量x:load("deg.Rdata...个head 取头几个tail 取尾巴几个还没做思考题:如何跳出一个表达矩阵里方差最大1000个基因思考题:取出大于1所有行向量/列表隐式循环-lapplylapply(list, FUN, …)...这是一个矩阵2. 先置3. 把行名变成一列4. “宽”变成“长”把格式变成类似于 ggplot2形式,一列作为x,一列作为y5....() # 列出工作目录下文件dir(pattern = ".R$") #列出工作目录下以.R结尾文件file.create("douhua.txt") #用代码创建文件file.exists("douhua.txt

    9700

    十二、R语言综合应用

    生信技能树学习之R语言综合应用 一、玩转字符串 图片 x <- "The birch canoe slid on the smooth planks." x [1] "The birch canoe...##是用来返回向量中元素个数 返回值1 1.2.字符串拆分 str_split(x," ") ### 以空格为分隔符,拆分开。...1.4.字符检测 str_detect(x2,"h") ### 看x2这个长度为8向量每个元素是否含有h这个关键词,生成与x2长度相等且一一对应逻辑值向量 str_starts(x2,"...1.置t 2.把原来行名变成第一列 3.宽变长 4.画图 # 表达矩阵 set.seed(10086) ###目的是为了使后边rnorm值变得固定 exp = matrix...七、一些顶呱呱函数 # 1.match----- load("matchtest.Rdata") x y ## 如何把y列名正确替换为x里面的ID?

    3.1K30

    生信入门马拉松之R语言基础-脚本项目管理、条件循环、表达矩阵和一丢丢数据挖掘(Day 7)

    R语言基础学习笔记-Day71. 复习R包stringr字符串操作几个函数-长度、拆分、提取、字符检测、替换和删除。...1:10, b = rnorm(16), c = seq(1,3,0.1))slpply(x,length)#返回结果是个列表,用sapply(x,length)代码返回一个向量...表达矩阵需要变化3.2.1 初始表达矩阵:3.2.2 置(行变列,列变行)3.2.3 把原来行名变成第一列3.2.4 变形(宽变长)一定要先单独学会某个包/函数,才能应用它吗?不一定!...生信实战中R语言几个重点函数【小洁老师语录】编程能力,就是解决问题能力,也是变优秀能力R语言基础入门课程-到此结束7. 数据挖掘生信技能树小洁老师7.1 为什么数据挖掘?...7.5.3 箱线图应用单个基因在两组之间表达量差异可视化。分组信息:是一个有重复值离散型向量,分组向量元素和表达矩阵列是一一对应

    17500

    从零开始异世界生信学习 R语言部分 06 R应用专题

    .检测字符串长度 str_length(x) #计算字符串中有多少字符 length(x) #计算向量中元素个数 图片 图片 2. str_split 字符串拆分 x <- "The birch...(y," ",simplify = T) ##加入参数后,可以字符串拆分成矩阵 图片 3. str_sub 按位置提取字符串 x <- "The birch canoe slid on the smooth...str_split(x," ") x2 = str_split(x," ")[[1]];x2 ### 4.字符检测 str_detect(x2,"h") ##用来检测元素中字符,生成与向量元素相等逻辑值向量...操作函数,批量操作 图片 图片 分批次运行结果保存为R.data格式便于管理数据 图片 大段代码暂时不运行可以进行折叠,并加入一个if 判断或者注释掉 表达矩阵箱线图 表达矩阵 R 语言作图要求宽数据表达矩阵转变成长数据后昨天...() %>% #表达矩阵换为数据框 rownames_to_column() %>% #行名变成一列 mutate(group = rep(c("control","treat"),each

    2.5K30

    R语言 常见函数知识点梳理与解析 | 精选分析

    R语言|第2讲:生成数据 R语言常用数据输入与输出方法 | 第三讲 R语言数据管理与dplyr、tidyr | 第4讲 R语言 控制流:for、while、ifelse和自定义函数function...15、字符串处理函数 character:字符向量 nchar:字符数 substr:取子串 format,format C:把对象用格式转换为字符串 paste,strsplit:连接或拆分 charmatch...data.matrix:把数据框转换为数值型矩阵 lower.tri:矩阵下三角部分 mat.or.vec:生成矩阵向量 t:矩阵置 cbind:把列合并为矩阵 rbind:把行合并为矩阵 diag...:矩阵对角元素向量或生成对角矩阵 aperm:数组置 nrow, ncol:计算数组行数和列数 dim:对象向量 dimnames:对象维名 row/colnames:行名或列名 %*%:矩阵乘法...,&,&&,|,||,xor():逻辑运算符 logical:生成逻辑向量 all,any:逻辑向量都为真或存在真 ifelse():二者择一 match,%in%:查找 unique:找出互不相同元素

    2.3K21

    R语言入门系列之三:R脚本

    for循环重复执行一个语句,直到value值不再包含在向量vector中为止,for结构基本语法如下所示: for (value in vector) { statements } 例如我们想要将群落数据小数值转换成百分值...,基本语法如下所示: repeat { commands if(condition){ break } } repeat重复执行一个命令直到if判断条件符合然后使用...其中X数组,包括矩阵,MARGIN:1表示矩阵行,2表示矩阵列,也可以是c(1,2),举例如下: 最终以向量矩阵返回结果。..., USE.NAMES = TRUE) X表示一个向量或者列表对象,其余对象将被通过as.list强制转换为list,simplify为逻辑值或者字符串,指明结果是否应该被简化为向量矩阵或者高维数组,...如果simplify="array",结果返回一个数组。举例如下: 4自定义函数 用户可以根据需求自定义函数,R函数是通过使用关键字function来创建。

    3.7K20

    R语言学习笔记-Day6

    R语言综合应用tidyverse:集成化R包转换-可视化-模型1 字符串"stringr"str_length()str_split()str_sub()1.1 检测字符串长度str.length()...计算一个"字符串"内字符数。...str_split(y," ",simplify = T),1#去除" "和数字str_remove_all(y," |\d")#正则表达式"\d"代表数字1.8 大小写转换tolower()#字符串内全部字母转换为小写...*1if(F){...} #{}内所有代码被跳过if(T){...} #{}内代码执行#针对限速步骤可以限速步骤保存为.Rdata,之后加载该文件即可#下载数据代码,可保留但不反复运行*2分成多个脚本...函数仅有三个参数ifelse(x,yes,no)#x:逻辑值或逻辑值向量#yes:逻辑值为T时返回值#no:逻辑值为F时返回值i = 1ifelse(i>0,"+","-")1 "+"多个条件仍适用

    17100

    5R语言综合运用

    length(x) 是 R 语言中基本函数,用于计算一个对象(如向量、列表等)中元素数量。...这两个函数都用于字符串转换为小写字母,但是它们有以下区别:库依赖:str_to_lower()需要先安装和加载stringr包,而tolower()是R内置函数,不需要任何额外库。...总的来说,两个函数都可以用于字符串转换为小写字母,但str_to_lower()更具特定性,而tolower()则更通用且直接可用。...tail(sort(x),5) 1 0.7370797 0.7998363 1.3085763 1.5950895 2.1714762 ```r #思考2,挑出一个表达矩阵里方差最大1000个基因,转换为数据框取...(z,var=apply(z, 1, sd))#为每行取方差,增加到最后一列 z <- rownames_to_column(z)#行名作为第一列,不可先加行名,否则每行取方差显示NA,因为数据类型不一样

    2.3K00

    Learn R 专题1-3

    ,包含空格和符号 length(x) #返回向量中元素个数,即x中只有一个元素 [1] 1 y = c("jimmy 150","nicker 140","tony 152") #y是字符向量...,由三个字符串组成向量 #“jimmy 150”:字符串,一个引号中所有的东西 #引号内单个字母/数字/符号:字符 2.字符串拆分 代码2 str_split() >str_split...()函数 ifelse(x,yes,no) x:逻辑值或逻辑值向量; yes:逻辑值为T时返回值; no:逻辑值为F时返回值 i = 1 ifelse(i>0,"+","-") > ifelse...14 #do.call 列表里元素进行批量操作;cbind是按列拼接起来(向量长度得是相同) 长脚本管理方式 if(T){} #运行{}中代码;可折叠 if(F){} #跳过{}中代码...(tidyr) library(tibble) library(dplyr) dat = t(exp) %>% #数据置 行列互换 as.data.frame() %>% #矩阵换为数据框

    1.5K00

    R语言数据结构(包含向量向量化详细解释)

    也就是说,向量所有元素必须属于同种模式(mode),或数据类型(见1.2),比如数值型,字符型等。其类型可以用typeof()查看。 标量只含有一个元素,在R中没有0维度或标量类型。...向量有哪些基本类型 两大类,原子向量和列表(又叫递归向量) 原子向量有6种类型:逻辑型,整型,双精度型,字符型,复数型和原始型。整型和双精度型统称为数值型向量。...2向量循环补齐 两个向量使用运算符,如果两个向量长度不同,R自动循环补齐(recycle),也就是它会自动重复较短向量,直到与另外一个向量匹配。...3向量化及向量化函数 3.1向量输入,向量矩阵输出 向量输入,向量输出 向量化就是对向量每一个元素应用函数,如果一个函数使用了向量运算符,那么它也被向量化了,代码运行速度提升。...4 常见数据结构和向量关系及常见操作 4.1矩阵 前已述及,矩阵也是向量,特殊向量,包含量阿哥附加属性:行和列。所以,矩阵也有模式,例如数值型或字符型。但向量不能看做有一列或一行矩阵

    7.1K20

    跟小洁老师学习R语言第七天

    xstr_length(x)#检测字符串内字符数,空格也算length(x)#向量里面元素个数2.字符串拆分str_split(x," ")#以空格为分隔符号字符串拆分开x2 = str_split...# 表达矩阵set.seed(10086)exp = matrix(rnorm(18),ncol = 6)#创建一个18个数字,6列矩阵exp = round(exp,2)#保留小数点后两位rownames...as.data.frame() %>% #转换为数据框架 rownames_to_column() %>% #把行名变为正式一列 mutate(group = rep(c("control",...(test, 1, sum)#2.lapply(list, FUN, …) # 对列表/向量每个元素(向量)实施相同操作test <- list(x = 36:33,y = 32:35,z = 30...简化结果,返回矩阵向量sapply(test,mean)sapply(test,fivenum)class(sapply(test,fivenum))专题六:两个数据框链接test1 <- data.frame

    1.5K10

    2023.4生信马拉松day7-R语言综合应用

    本节课程大纲 六个专题—— 1.玩转字符串★★★ 2.玩转数据框★★★ 3.条件和循环★★★★★ 4.表达矩阵画箱线图★★★★ 5.隐式循环★★★ 6.两个数据框连接★★ 课前提示: 六个专题互不干扰互相独立...; -(2)判断之后得到一个与x2相等逻辑值向量; -(3)可以用来做“根据逻辑值提取x子集”; str_detect(x2,"h") #判断x每个字符串含不含有某个字母或者多个字母组合; str_starts...以上操作根据此前学过知识新增列的话这么写: 图片 4.简单了解:select() 、filter()筛选列、行 5.补充知识:管道符%>% -(1)当遇到连续步骤时:多次赋值,产生多个中间变量;...,也支持多个逻辑值组成向量 -(6)相当于对向量每个元素逐个进行判断,然后对判断结果F/T进行逐个替换; i = 1 ifelse(i>0,"+","-") x = rnorm(3) x ifelse...(i>0,"+",ifelse(i<0,"-","0")) #嵌套式ifelse:不符合大于零条件,就再进行一步判断; 练习7-2 # 1.加载deg.Rdata,根据a、b两列值,按照以下条件生成向量

    3.6K80

    R语言基础5(绘图基础)

    2、搜索画图代码 3、仿制示例数据 4、套代码,调整细节 玩转字符串 str_length() length()#向量里面元素个数 str_split() str_sub(x,5,9)#提取5-9元素...可用于向量取子集; str_replace(x,"o","a")#x中o替换为a,只替换出现第一个o; str_replace(x,"o|s","a")#x中o或者s替换为a,只替换出现第一个...o; str_replace_all(x,"o","a")#x中o替换为a,替换所有的o; str_remove(x," ")##x中第一个空格删除; str_remove_all(x," ")...##x中全部空格删除; 图片 library(stringr) str_split(x," ")##按照空格分隔 str_split(x," ",simplify=T)##列表简化为矩阵 玩转数据框...(i>0,"+","-") ifelse(x,yes,no) x:逻辑值或逻辑向量; yes:逻辑值为TRUE时返回值 no:逻辑值为FALSE时返回值 x = rnorm(3) x ifelse

    34871

    生信马拉松 Day7

    ;x 1.1 检测字符串长度 str_length(x) #注意包括空格,空格也算一个 #[1] 42 length(x) #算向量有多少个元素 #[1] 1 1.2 字符串拆分 str_split...(x1) #matrix x3 = head(x2,50) #只要前50行 pheatmap::pheatmap(x3) #画热图 #使用管道符%>%代码 iris %>% select(-5...,不可以是多个逻辑值组成向量 } #if+else格式 if (){ }else{ } #ifelse格式 ifelse( , ,) #第一个逗号前是逻辑值 #for格式 for(){...碎碎念:这个挺绝,代码把这类数据变换都涵盖了,适合自己跑一遍体会代码美丽 # 表达矩阵 set.seed(10086) #产生相同随机数 exp = matrix(rnorm(18),ncol...2种方法 2.如何把数据框某列“ ”转换为NA iris$Species[iris$Species=='']=NA 3.如何删除多余信息 #这里示例数据中,a$tumor_stage.diagnoses

    25000

    Day7-R语言综合运用

    玩转字符字符向量:由字符串元素组成向量字符串:一个引号里所有东西字符:引号里单个字母/数字/符合需安装stringr包长度:str_length()length()计算字符个数str_length...函数3个参数:ifels(x,yes,no)x: 逻辑值或逻辑向量yes: 逻辑值为TRUE时返回值no: 逻辑值为FALSE时返回值i = 1ifelse(i>0,"+","-")[1] "+"* ifelse...] 1[1] 2[1] 3[1] 4矩阵/数据框隐式循坏-applyapply(X, MARGIN, FUN, …) 其中X是数据框/矩阵名;MARGIN为1表示行,为2表示列,FUN是函数对X每一行...): 全连接left_join():左连接right_join():右连接表达矩阵画箱线图一些好用函数 1.match-----load("matchtest.Rdata")xy## 如何把y列名正确替换为...dir() # 列出工作目录下文件dir(pattern = ".R$") #列出工作目录下以.R结尾文件file.create("douhua.txt") #用代码创建文件file.exists(

    8710

    快速掌握apply函数家族推荐这篇文档

    sapply:与 lapply 类似,但它自动结果转换为向量矩阵或数组。 apply:用于对矩阵或数组行、列或其他维度进行循环操作。...❝如果想要将结果转换为向量矩阵或数组,可以使用 sapply 函数。它基本语法与 lapply 类似,只是 lapply 替换为 sapply 即可。...❞ 例如,下面的代码使用 sapply 函数列表中每个字符串转换为大写: # 创建列表 x <- list("apple", "banana", "cherry") # 使用 sapply 函数对列表中每个字符串执行...它基本语法如下: apply(矩阵或数组, 维度, 函数) 其中,矩阵或数组是要操作数据,维度是指定要对哪一维度进行操作,函数是要对数据执行操作。...6 9 例子 2:使用 apply 函数矩阵置 下面的代码使用 apply 函数矩阵置: # 创建矩阵 x <- matrix(1:9, nrow = 3) # 使用 apply 函数矩阵

    2.9K30
    领券