r - R中带有嵌套循环的函数
问题描述
我正在尝试编写一个函数,如果给定位置 (x) 的所有 3 个阀门都打开 (1),则返回“失败”,但如果任何阀门关闭 (0),则返回“通过”。我的代码在下面,但它不起作用,我得到了错误---意外的'else' in:“else”---而且我不知道我的代码哪里出错了。
systemFail <- function(x) {
if(df$valveOne[df$location == x] == 1) {
if(df$valveTwo[df$location == x] == 1) {
if(df$valveThree[df$location == x] == 1) {
print("Fail")}}}
else {
print ("Pass")}
else {
Print("Pass")}
else {
Print("Pass")}
}
解决方案
我认为你在最里面的 if-else 有太多的闭合花括号,而在外层没有足够的花括号:
尝试:
systemFail <- function(x) {
if(df$valveOne[df$location == x] == 1) {
if(df$valveTwo[df$location == x] == 1) {
if(df$valveThree[df$location == x] == 1) { print("Fail")}
else { print ("Pass") } }
else { print("Pass") } }
else {print("Pass")} }
等等……这没有意义。为什么三个不同的阀门会有一个“位置”列。相反,它应该是:
df <- data.frame( valve2loc= sample(0:1,20, repl=TRUE),
valve2loc= sample(0:1,20, repl=TRUE),
valve3loc= sample(0:1,20, repl=TRUE))
因此,具有三个打开/关闭值的三个阀门让您决定是否全部打开:
df$pass_fail <- c("Pass","Fail")[ 1+ (rowSums(df)==3)]
这是一个矢量化操作,计算阀门位置值的总和,确定它们在哪里都是“1”,如果是,则将逻辑 0/1 布尔结果加一,然后将其用作两个可能结果的索引。(基于索引,R 为 1,因此需要将 1 添加到逻辑值 (0/1) 以使它们可用于索引另一个 2 值向量。)
推荐阅读
- python - Python将mysql提取到csv
- nginx - Varnish High Availability 是否有免费的模拟(nginx、haproxy、varnish config for HA)?
- android - 向视图添加一些文本
- android - 如何获取 Oreo 中正在运行的应用程序列表?
- django - 如何保护在 django 中创建的目录,以便只有 django 应用程序可以访问它
- google-cloud-datalab - Google Cloud Datalab 未运行单元格:文件夹创建和保存以及检查点失败
- wso2 - 在 wso2 api 管理器中进行身份验证后的重定向
- php - Prestashop 1.6 - 从 TPL 按钮调用函数
- javascript - 从处理子域但不处理ajax请求的子域传递php会话
- electron - 64位windows电子js的命令代码是什么?