当前位置: 首页 > 知识库问答 >
问题:

有没有在R函数中循环的方法?

华知
2023-03-14

我在尝试创建一个函数时遇到了麻烦。我想把数字转换成一周中指定的日子。例如:1='星期一',2='星期二',3='星期三',4='星期四',5='星期五',6='星期六',0='星期日'

下面是我编写函数的尝试,但我得到了一个错误,我还认为一定有一种方法可以循环它。我只是不知道怎么做。

#experiment
pow <- function(x) {
   
 if (x == 1)

    {

    print("Monday")  

    }

    else if (x == 2)

    {

    print("Tuesday")

    } 

    else if (x == 3)

    {
    print("Wednesday")
    } 
    else if (x == 4)
    {
    print("Thursday")
    } 
    else if (x == 5)
    {
    print("Friday")
    } 
    else if (x == 6)
    {
    print("Saturday")
    } 
    else if (x == 0)
    {
    print("Sunday")
    } 
    else if (is.na(x) ==TRUE)
     {print("Sorry, please enter two numbers.")
    }
}

共有2个答案

邢硕
2023-03-14

可以创建向量并将其子集:

pow <- function(x) {
  days <- c('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
  days[x + 1]
}

pow(2)
#[1] "Tuesday"
pow(0)
#[1] "Sunday"

#You can also pass more than 1 number to the function
pow(c(1, 5, 6, NA, 3))
#[1] "Monday"    "Friday"    "Saturday"  NA     "Wednesday"
艾阳羽
2023-03-14

我将在这里使用dplyr包中的case\u,而只是让函数将输入映射到某个字符串输出。

library(dplyr)

pow <- function(x) {
    output = case_when(
        x == 0 ~ "Sunday",
        x == 1 ~ "Monday",
        x == 2 ~ "Tuesday",
        x == 3 ~ "Wednesday",
        x == 4 ~ "Thursday",
        x == 5 ~ "Friday",
        x == 6 ~ "Saturday",
        TRUE ~ "Sorry, please enter two numbers."
    )

    return(output)
}

 类似资料:
  • 我正在尝试从几个mutate(dplyr包)函数创建一个循环函数。下面的每一行代码都运行得很好,但是我正在寻找更优雅的代码(如果可能的话,在一行代码中),因为我需要再重复这五行代码10次(对于额外的10个数据帧)。 是我的Data.Frame,有5列10,000行。

  • 问题内容: 目前,我正在做以下事情,这变得很乏味: 我猜还有其他一些可以接受的方式来处理这些东西吗? 我正在寻找的功能是按需执行一次。例如,按下某个按钮。这是一个交互式应用程序,具有许多用户控制的开关。每个开关都有一个垃圾变量,只是为了跟踪是否已运行,似乎效率很低。 问题答案: 我会在函数上使用装饰器来处理跟踪运行次数的情况。 现在将只运行一次。对其的其他调用将返回。如果希望它返回其他内容,只需在

  • 假设我有一系列python函数: 我想这样称呼他们: 大概是这样的: 如果我有很多函数要调用,这是很有帮助的,但这将有for循环。在没有for循环的情况下,我是否有其他方法来执行此操作?

  • 我想使用以下循环创建一个新列。表中只有“open”和“start”列。我想创建一个新列“startopen”,如果“start”等于1,那么“startopen”等于“open”。否则,“startopen”等于此新创建列上方行中的任何“startopen”。目前,我能够通过以下方式实现这一点: 这有效,但对于大型数据集来说非常慢。是否有任何内置函数可以更快地完成此操作?

  • 我试图在Java中创建一个简单的动画,显示一个蓝色的球在一个500 x 500的窗口中水平移动。球应该以1px/30ms的速度移动。问题是,窗口只有在时循环退出时才被绘制,而不是在我想要的时循环的每次迭代中。这导致蓝色的球被绘制在它的最终位置。你能告诉我我在这里做错了什么吗?我也尝试过在EDT上使用绘画组件()方法执行这段代码,得到了同样的结果。此外,正如其他帖子所建议的,当使用EDT和绘画组件(

  • 用户应该输入一个4位数的数字,我需要反向它我导入扫描并收到了来自用户的答案,但是如何反向呢?例如,如果用户键入9876,它将打印6789?我应该用%吗?