1

我在做作业/作业时遇到了问题,如果有人愿意提供帮助,我将不胜感激您的专业知识:)

我有一个名为 raceIDs 的文件(看起来像这样):

> raceIDs
[1] "GER" "SUI" "NZ2" "US1" "US2" "POR" "FRA" "AUS" "NZ1" "SWE"

我还创建了一个名为:

getTimes()

例如,如果我输入:

> getTimes("GER")
[1] "11:10:02" "11:35:05"  #Shows the starting and finishing times

我需要在这里做的是创建一个矩阵,显示所有国家的开始和结束时间。

例如,我应该得到以下结果的矩阵:

> raceTimes
    start        finish
GER "11:10:02"   "11:35:05"
SUI "11:10:02"   "11:35:22"
#and so on....

我的尝试:

> GER <- getTimes("GER")
> SUI <- getTimes("SUI")
> NZ2 <- getTimes("NZ2")
> US1 <- getTimes("US1")
> US2 <- getTimes("US2")
> POR <- getTimes("POR")
> FRA <- getTimes("FRA")
> AUS <- getTimes("AUS")
> NZ1 <- getTimes("NZ1")
> SWE <- getTimes("SWE")

> allTimes<-c(GER, SUI, NZ2, US1, US2, POR, FRA, AUS, NZ1, SWE)
> raceTimes <- matrix(allTimes, ncol=2)
> rownames(raceTimes) <- paste(raceIDs)
> colnames(raceTimes) <- c("start", "finish")

> raceTimes
    start      finish    
GER "11:10:02" "11:10:02"
SUI "11:35:05" "11:34:31"
NZ2 "11:10:02" "11:10:02"
US1 "11:35:22" "11:34:45"
US2 "11:10:02" "11:10:03"
POR "11:34:12" "11:36:48"
FRA "11:10:01" "11:10:01"
AUS "11:33:29" "11:35:16"
NZ1 "11:10:01" "11:10:03"
SWE "11:36:05" "11:35:08"

正如您在上面看到的,我的矩阵不正确。例如,“GER”(“11:35:05”)的完成结果显示为“SUI”的开始时间。

请问有什么建议吗?

4

1 回答 1

2

常见错误:从向量中创建矩阵或数组以列优先顺序填充,如介绍手册所述::

数据向量中的值以与它们在 FORTRAN 中出现的顺序相同的顺序给出数组中的值,即“列主顺序”,第一个下标移动最快,最后一个下标最慢。

这可以通过以下方式观察到

matrix(1:4, ncol = 2)

#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4

最直接的解决方法是添加byrow = TRUE到您的matrix通话中。

matrix(1:4, ncol = 2, byrow = TRUE)

#      [,1] [,2]
# [1,]    1    2
# [2,]    3    4

raceTimes <- matrix(allTimes, ncol=2, byrow = TRUE)

一个更好的主意是使用rbind上游来进行连接,而无需将向量串在一起:

raceTimes <- rbind(GER, SUI, NZ2, US1, US2, POR, FRA, AUS, NZ1, SWE)

一个更好的主意是使用循环,sapply而不是getTimes为每个元素输入raceID

raceTimes <- sapply(raceID, getTimes)
raceTimes <- t(raceTimes)
于 2013-10-24T05:07:54.157 回答