如何向量化这个循环

use*_*875 5 r

ConvertToLocal下面的函数采用和的数据框,NamesTimes使用一些if语句进行时区转换.如何对此进行矢量化以便我不使用循环?

谢谢.

这是代码:

ConvertToLocal<-function(data)
{
 Name<-data$Name
 Time<-data$Time
  for(i in 1:length(Name))
  {
    if(Name[i]== "Bob" | Name[i] == "Al"  )
    {
      Time[i]<-format(Time[i],tz="America/Los_Angeles")
    }else if (Name[i] == "Mike" | Name[i]  == "Tom" )
    {
      Time[i]<-format(Time[i],tz="Asia/Singapore")

    }else if (Name[i]  == "Fred")
    {
      Time[i]<- format(Time[i],tz="Europe/London")
    }
  }
  return(Time)
} 

Time<-c(as.POSIXct("2015-02-03 14:27:35.943", tz = "UTC"),as.POSIXct("2015-02-03 14:27:35.943", tz = "UTC"),as.POSIXct("2015-02-03 14:27:35.943", tz = "UTC"),as.POSIXct("2015-02-03 14:27:35.943", tz = "UTC"))
Name<-c("BOB","Al","Mike","Fred")
data<- data.frame(Name = Name, Time = Time)
ConvertToLocal(data)
Run Code Online (Sandbox Code Playgroud)

Jth*_*rpe 2

尝试这个:

ConvertToLocal<-function(data) {
    Name<-data$Name
    Time<-data$Time

    indx <- Name== "Bob" | Name == "Al"
    Time[indx]<-format(Time[indx],tz="America/Los_Angeles")

    indx <- Name == "Mike" | Name  == "Tom" 
    Time[indx]<-format(Time[indx],tz="Asia/Singapore")

    indx <- Name  == "Fred"
    Time[indx]<- format(Time[indx],tz="Europe/London")

    return(Time)
} 
Run Code Online (Sandbox Code Playgroud)