Làm cách nào để sử dụng mutate
(giả định rằng tôi đang tìm kiếm đánh giá tiêu chuẩn trong trường hợp của mình, và do đó không hoàn toàn tự tin vào thời điểm này) khi sử dụng chức năng chấp nhận một danh sách các tên biến, như thế này:dplyr: đánh giá tiêu chuẩn cho biến đổi với tên biến được trích dẫn
createSum = function(data, variableNames) {
data %>%
mutate_(sumvar = interp(~ sum(var, na.rm = TRUE),
var = as.name(paste(as.character(variableNames), collapse =","))))
}
Dưới đây là một MWe rằng dải chức năng logic cốt lõi của nó và chứng minh những gì tôi đang cố gắng để đạt được:
library(dplyr)
library(lazyeval)
# function to make random table with given column names
makeTable = function(colNames, sampleSize) {
liSample = lapply(colNames, function(week) {
sample = rnorm(sampleSize)
})
names(liSample) = as.character(colNames)
return(tbl_df(data.frame(liSample, check.names = FALSE)))
}
# create some sample data with the column name patterns required
weekDates = seq.Date(from = as.Date("2014-01-01"),
to = as.Date("2014-08-01"), by = "week")
dfTest = makeTable(weekDates, 10)
# test mutate on this table
dfTest %>%
mutate_(sumvar = interp(~ sum(var, na.rm = TRUE),
var = as.name(paste(as.character(weekDates), collapse =","))))
Dự kiến sản lượng ở đây là những gì sẽ được trả lại bởi:
rowSums(dfTest[, as.character(weekDates)])
Bạn xác định 'makeTable' nhưng sau đó gọi 'makeDataFrame'. Đây có phải là chức năng giống nhau không? Sẽ rất hữu ích khi mô tả đầu ra mà bạn mong đợi cho đầu vào mẫu này (đặt một hạt giống cho dữ liệu có thể tái tạo). – MrFlick
@MrFlick Cảm ơn. Đã thay đổi tên hàm. Không có gì lạ mắt được mong đợi, chỉ là 'tổng hợp' của tất cả các biến có tên biến được chuyển đến hàm, theo hàng. Sẽ cập nhật với đầu ra dự kiến. – tchakravarty