我有一个课堂作业(job),任务是在R中创建一个函数,它接受一个值的向量,并在华氏、摄氏度和开尔文之间进行转换.我试图通过我的代码运行的示例应该生成一个只包含3个值的返回向量,但它返回的是一个包含26个值的向量.

以下是我的代码:

convTemp <- function(x, from = "C", to = "F") {
    newX <- vector("double", length(x))
    if (from == to) {
        warning("Your 'from' parameter is the same as your 'to' parameter!") # From and To are same temperature scale
    }
    if (from == "C" && to == "F") { # Celsius to Fahrenheit
        for (i in x) {
            newX[i] <- ((9/5)*x[i]+32)
        }
    }
    if (from == "C" && to == "K") { # Celsius to Kelvin
        for (i in x) {
            newX[i] <- (x[i]+273.15)
        }
    }
    if (from == "F" && to == "C") { # Fahrenheit to Celsius
        for (i in x) {
            newX[i] <- ((x[i]-32)*(5/9))
        }
    }
    if (from == "K" && to == "C") { # Kelvin to Celsius
        for (i in x) {
            newX[i] <- (x[i]-273.15)
        }
    }
    if (from == "F" && to == "K") { # Fahrenheit to Kelvin
        for (i in x) {
            newX[i] <- ((((x[i]-32)*5)/9)+273.15)
        }
    }
    if (from == "K" && to == "F") { # Kelvin to Fahrenheit
        for (i in x) {
            newX[i] <- ((((x[i]-273.15)*9)/5)+32)
        }
    }
    return(newX)
}

convTemp(c(35,40,45), from="F", to="K")

以下是我收到的输出:

 [1]  0  0  0 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[26] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

所以我不确定为什么这个函数会返回这么大的缺失值向量,而它应该返回一个包含3个开尔文值的向量.

推荐答案

在代码中(假设这是一项编码练习),我们不需要循环值(for(i in x)),而是循环序列(for(i in seq_along(x)))

convTemp <- function(x, from = "C", to = "F") {
    newX <- vector("double", length(x))
    if (from == to) {
        warning("Your 'from' parameter is the same as your 'to' parameter!") # From and To are same temperature scale
    }
    if (from == "C" && to == "F") { # Celsius to Fahrenheit
        for (i in seq_along(x)) {
            newX[i] <- ((9/5)*x[i]+32)
        }
    }
    if (from == "C" && to == "K") { # Celsius to Kelvin
        for (i in seq_along(x)) {
            newX[i] <- (x[i]+273.15)
        }
    }
    if (from == "F" && to == "C") { # Fahrenheit to Celsius
        for (i in seq_along(x)) {
            newX[i] <- ((x[i]-32)*(5/9))
        }
    }
    if (from == "K" && to == "C") { # Kelvin to Celsius
        for (i in seq_along(x)) {
            newX[i] <- (x[i]-273.15)
        }
    }
    if (from == "F" && to == "K") { # Fahrenheit to Kelvin
        for (i in seq_along(x)) {
            newX[i] <- ((((x[i]-32)*5)/9)+273.15)
        }
    }
    if (from == "K" && to == "F") { # Kelvin to Fahrenheit
        for (i in seq_along(x)) {
            newX[i] <- ((((x[i]-273.15)*9)/5)+32)
        }
    }
    return(newX)
}

-测试

> convTemp(c(35,40,45), from="F", to="K")
[1] 274.8167 277.5944 280.3722

R相关问答推荐

如何使用geom_sf在边界显示两种 colored颜色 ?

如何创建构成多个独立列条目列表的收件箱框列?

根据列表中项目的名称多次合并数据框和列表

在R底座中更改白天和夜晚的背景 colored颜色

基于现有类创建类的打印方法(即,打印tibles更长时间)

在位置周围设定一个半径并识别该半径内的其他位置

保存包含循环和ifelse的函数的输出

如何在R中添加截止点到ROC曲线图?

derrr mutate case_when grepl不能在R中正确返回值

RStudio中相关数据的分组箱形图

迭代通过1个长度的字符串长字符R

使用ggsankey调整Sankey图中单个 node 上的标签

如何在一次运行中使用count进行多列计数

如何同时从多个列表中获取名字?

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

R基于变量组合创建新的指标列

如何在内联代码中添加额外的空格(R Markdown)

重写时间间隔模糊连接以减少内存消耗

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

使用点图调整离散轴比例