我正在try 使用sApply和Switch将描述性名称应用于数据.我已经多次使用这种方法,没有出现问题,但在我最近的项目中(只有一个!)专栏,它抛出了一个错误.我最好的猜测是,即使值被保存为字符串,否则该值将是R中的保留字.我在下面创建了一个可重现的示例.

我的项目中的实际价值与性别无关,可能有许多可能的 Select .谁能告诉我如何使用sApply/Switch来工作,以避免在我的代码中使用许多嵌套的ifElse语句?

# create test data
testdta <- as.data.frame(cbind(userid = c("1", "2", "3", "4"), gender = c("F", "M", "F", "M")))

# sapply/switch works with strings that are not reserved words
testdta$uiddescription <- sapply(testdta$userid, switch, "1" = "1 - first", "2" = "2 - second", "3+ - third or beyond")
testdta

# sapply/switch won't work when trying to interpret gender (possibly because F is reserved?)
testdta$gdescription <- sapply(testdta$gender, switch, "F" = "F - female", "M" = "M - male")

我收到的错误是"Error in Get(as.Character(Fun),MODE="Function",envir=envir): 找不到模式‘Function’的对象‘F-Female’."

推荐答案

它的发生是因为sapply中的部分参数匹配.它将"F" = 读作sapply中的FUN参数.如果你是明确的,做FUN = switch,它会起作用的.

R相关问答推荐

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

单击 map 后,将坐标复制到剪贴板

次级y轴R gggplot2

更改默认系列1以更改名称

将非重复序列高效转换为长格式

如何通过ggplot2添加短轴和删除长轴?

绘制采样开始和采样结束之间的事件

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

将一个字符串向量调整为与其他字符串向量完全相同的大小

如何在PackageStatus()中列出&q;不可用的包&q;?

基于R中的间隔扩展数据集行

悬崖三角洲超大型群数计算导致整数溢出

基于数据集属性将科分配给物种

R如何将列名转换为更好的年和月格式

在R中,如何将误差条放置在堆叠的每个条上?

扩展R中包含列表的数据框

具有自定义仓位限制和计数的GGPLATE直方图

分隔日期格式为2020年7月1日

将R中对象的CSV数组转换为JSON数组

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题