【问题标题】:Accessing rows in XDF File访问 XDF 文件中的行
【发布时间】:2019-02-14 10:34:12
【问题描述】:

我正在解决来自https://github.com/MicrosoftLearning/20773_Analyzing-Big-Data-with-Microsoft-R/blob/master/Instructions/20773A_LAB_AK_04.md 的练习 2。该代码创建了计算区域时间等的函数。我不明白为什么可以通过例如函数内部的departureYear <- dataList[[departureYearVarIndex]][i] 访问 XDF 文件中的变量和行,但是如果我尝试仅从子集文件中执行相同操作:

rxOptions(reportProgress = 1)
flightDelayDataSubsetFile <- "\\\\LON-RSVR\\Data\\flightDelayDataSubset.xdf"
flightDelayDataSubset <- rxDataStep(inData = mergedFlightDelayData,
    outFile = flightDelayDataSubsetFile, overwrite = TRUE,
    rowSelection = rbinom(.rxNumRows, size = 1, prob = 0.005)
)

例如flightDelayDataSubset[[1]][1] 它告诉我“错误...这个 S4 类不是子集”。

如何访问 XDF 文件中的元素?为什么它可以在函数中工作,但不能手动用于现有文件?我可能问错了问题,因为我不明白这个功能是如何工作的。函数参数 dataList 以 XDF 文件列的向量形式给出

transformFunc = standardizeTimes,
        transformVars = c("Year", "Month", "DayofMonth", "DepTime", "ActualElapsedTime", "OriginTimeZone")

。在函数中,它被视为列表 [[]] 而不是 dataList[[arrivalTimeVarIndex]]。我完全困惑它是如何工作的。问题可能是,这个函数如何知道哪个参数与

transformVars = c("Year", "Month", "DayofMonth", "DepTime", "ActualElapsedTime", "OriginTimeZone")?

函数如下所示:

standardizeTimes <- function (dataList) {
    # Check to see whether this is a test chunk
    if (.rxIsTestChunk) {
        return(dataList)
    }

# Create a new vector for holding the standardized departure time
# and add it to the list of variable values
departureTimeVarIndex <- length(dataList) + 1
dataList[[departureTimeVarIndex]] <- rep(as.numeric(NA), times = .rxNumRows)
names(dataList)[departureTimeVarIndex] <- "StandardizedDepartureTime"

# Do the same for standardized arrival time
arrivalTimeVarIndex <- length(dataList) + 1
dataList[[arrivalTimeVarIndex]] <- rep(as.numeric(NA), times = .rxNumRows)
names(dataList)[arrivalTimeVarIndex] <- "StandardizedArrivalTime"
departureYearVarIndex <- 1
departureMonthVarIndex <- 2
departureDayVarIndex <- 3
departureTimeStringVarIndex <- 4
elapsedTimeVarIndex <- 5
departureTimezoneVarIndex <- 6

# Iterate through the rows and add the standardized arrival and departure times
for (i in 1:.rxNumRows) {
    # Get the local departure time details
    departureYear <- dataList[[departureYearVarIndex]][i]
    departureMonth <- dataList[[departureMonthVarIndex]][i]
    departureDay <- dataList[[departureDayVarIndex]][i]
    departureHour <- trunc(as.numeric(dataList[[departureTimeStringVarIndex]][i]) / 100)
    departureMinute <- as.numeric(dataList[[departureTimeStringVarIndex]][i]) %% 100
    departureTimeZone <- dataList[[departureTimezoneVarIndex]][i]

    # Construct the departure date and time, including timezone
    departureDateTimeString <- paste(departureYear, "-", departureMonth, "-", departureDay, " ", departureHour, ":", departureMinute, sep="")
    departureDateTime <- as.POSIXct(departureDateTimeString, tz = departureTimeZone)

    # Convert to UTC and store it
    standardizedDepartureDateTime <- format(departureDateTime, tz="UTC")
    dataList[[departureTimeVarIndex]][i] <- standardizedDepartureDateTime

    # Calculate the arrival date and time
    # Do this by adding the elapsed time to the departure time
    # The elapsed time is stored as the number of minutes (an integer)
    elapsedTime = dataList[[5]][i]
    standardizedArrivalDateTime <- format(as.POSIXct(standardizedDepartureDateTime) + minutes(elapsedTime))

        # Store it
        dataList[[arrivalTimeVarIndex]][i] <- standardizedArrivalDateTime
    }

    # Return the data including the new variables
    return(dataList)
}

flightDelayDataTimeZonesFile <- "\\\\LON-RSVR\\Data\\flightDelayDataTimezones.xdf"
flightDelayDataTimeZones <- rxDataStep(inData = flightDelayDataSubset,
    outFile = flightDelayDataTimeZonesFile, overwrite = TRUE,
    transformFunc = standardizeTimes,
    transformVars = c("Year", "Month", "DayofMonth", "DepTime", "ActualElapsedTime", "OriginTimeZone"),
    transformPackages = c("lubridate")
)

【问题讨论】:

    标签: r microsoft-r


    【解决方案1】:

    我的dplyrXdf 包可让您索引和子集 Xdf 文件,就像它们是数据框一样。具体来说,它定义了[[$ 方法来从文件中提取列(但不是[,因为实现问题)

    【讨论】:

    • 嗨 Hong Ooi,你能告诉我,我将如何访问例如“\\\\LON-RSVR\\Data\\flightDelayDataTimezones.xdf”的第一列? flightDelayDataTimeZonesFile[[1]]?
    • 感谢您的提示,在与我的功能“战斗”了两天之后,我明白了它是如何工作的。 dplyrXdf 包也非常好用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2012-07-21
    • 1970-01-01
    • 2011-07-07
    相关资源
    最近更新 更多