Slick one-lineRs
Какой ваш любимый однострочный шрифт в R
?
Включите короткий пример компаньона и ограничитесь одним кончиком за сообщение, пожалуйста.
Заметьте, ;
обманывает.
Пример: вычислить x[i] / x[i-1]
для вектора x
,
x <- 1:10
Reduce("/", as.data.frame(embed(x, 2)))
(собранный из R-help, я забываю, кто/когда)
Изменить: после некоторых начальных разногласий похоже, что вопрос снова открывается для записей.
Ответы
Ответ 1
Если вы хотите записать время, когда вы создали файл в его имени (возможно, чтобы сделать его уникальным или предотвратить перезапись), попробуйте эту однострочную функцию.
timestamp <- function(format = "%y%m%d%H%M%S")
{
strftime(Sys.time(), format)
}
Использование, например,
write.csv(
some_data_frame,
paste("some data ", timestamp(), ".csv", sep = "")
)
Ответ 2
Получить нечетные или даже индексы.
odds <- function(x) seq_along(x) %% 2 > 0
evens <- function(x) seq_along(x) %% 2 == 0
Использование, например,
odds(1:5)
evens(1:5)
Ответ 3
Мне часто нужны поддельные данные, чтобы проиллюстрировать, скажем, проблему регрессии. Вместо
X <- replicate(2, rnorm(100))
y <- X[,1] + X[,2] + rnorm(100)
df <- data.frame(y=y, X=X)
мы можем использовать
df <- transform(X <- as.data.frame(replicate(2, rnorm(100))),
y = V1+V2+rnorm(100))
для генерации двух некоррелированных предикторов, связанных с результатом y
.
Ответ 4
Удаление NaNs - которые являются неудобством каждый раз в то время - из вектора или блока данных (найденного где-то на R-справке)
is.na(x) <- is.na(x)
Пример:
> x <- c(1, NaN, 2, NaN, 3, NA)
> is.na(x) <- is.na(x)
> x
[1] 1 NA 2 NA 3 NA
Ответ 5
Преобразование даты Excel в даты R. Ответ адаптирован из кода Пола Меррелла.
excel_date_to_r_date <- function(excel_date, format)
{
#excel_date is the number of days since the 0th January 1900. See
#http://www.stat.auckland.ac.nz/~paul/ItDT/HTML/node67.html
strftime(as.Date(as.numeric(excel_date) - 2, origin = "1900-01-01"), format)
}
Использование, например,
excel_date_to_r_date(40700, "%d-%m-%Y")
Ответ 6
Не совсем то, что вам нужно, но установка многомерной линейной регрессионной модели в одной строке велика:
lm(y ~ x1 + x2)
Ответ 7
Reduce()
- новый ребенок на блоке. То же самое можно сделать с помощью do.call()
и немного быстрее (по крайней мере, в моей системе):
do.call("/", as.data.frame(embed(1:10, 2)))
R> do.call("/", as.data.frame(embed(1:10, 2)))
[1] 2.000000 1.500000 1.333333 1.250000 1.200000 1.166667 1.142857 1.125000
[9] 1.111111
R> Reduce("/", as.data.frame(embed(1:10, 2)))
[1] 2.000000 1.500000 1.333333 1.250000 1.200000 1.166667 1.142857 1.125000
[9] 1.111111
Ответ 8
Функция суммирует количество отсутствующих данных для каждой переменной в фрейме данных. Возвращает список.
propmiss <- function(dataframe) lapply(dataframe,function(x) data.frame(nmiss=sum(is.na(x)), n=length(x), propmiss=sum(is.na(x))/length(x)))
Не однострочный, но возврат этой информации в качестве фрейма данных более полезен.
propmiss <- function(dataframe) {
m <- sapply(dataframe, function(x) {
data.frame(
nmiss=sum(is.na(x)),
n=length(x),
propmiss=sum(is.na(x))/length(x)
)
})
d <- data.frame(t(m))
d <- sapply(d, unlist)
d <- as.data.frame(d)
d$variable <- row.names(d)
row.names(d) <- NULL
d <- cbind(d[ncol(d)],d[-ncol(d)])
return(d[order(d$propmiss), ])
}
Ответ 9
Очистка слайта удаляет все объекты из памяти.
rm(list=ls(all=TRUE))
Ответ 10
Редактирование нескольких столбцов является одним из моих любимых.
например. изменить все числовые столбцы на символы:
X <- iris
X[id] <- lapply(X[id <- sapply(X, is.numeric)], as.character)
или стандартизировать их
X[id] <- lapply(X[id <- sapply(X, is.numeric)], scales)
Ответ 11
Я бы сказал, посмотрите plyr
на пакет, полный slick oneliners!
Ответ 12
Ну, на самом деле не oneliner, а textConnection - это здорово!
x <- "1,3
1,a
1,g,4
3,d,6
2,X,1,3
2,K"
read.table(textConnection(x), sep=",", header=FALSE, na.strings="", fill=TRUE)
результат
V1 V2 V3 V4
1 1 3 NA NA
2 1 a NA NA
3 1 g 4 NA
4 3 d 6 NA
5 2 X 1 3
6 2 K NA NA
>
Ответ 13
Вот еще один наконечник, собранный из R-справки (если память служит Роменом Франсуа).
Удалить существующие переменные из рабочей области:
rm( list = Filter( exists, c("a", "b") ) )
Ответ 14
Мой любимый однострочный файл можно найти на страницах справки функции %in%
и в основном является его противоположностью.
f.wo <- function(x, y) x[!x %in% y]
Обернутая в приятную, маленькую функцию, она очень удобна. Например.
R> f.wo(c("a", "b", "c"), "b")
[1] "a" "c"
R> f.wo(1:8, c(2,7))
[1] 1 3 4 5 6 8
Ответ 15
Функция для чтения данных, разделенных пробелами из буфера обмена
read.cb <- function(...) read.table(file="clipboard", ...)
например.
# read data from the clipboard with a header
d<-read.cb(T)
#read data from clipboard without header
d<-read.cb()
Ответ 16
Функция для преобразования столбцов данных в кадре данных в факторные переменные
factorcols <- function(d, ...) lapply(d, function(x) factor(x, ...))
например. преобразовывать столбцы 1-4 в фрейм данных d в фактор-переменные
d[1:4] <- factorcols(d[1:4])
Ответ 17
Возвращает новую матрицу, где строки исходной матрицы сортируются по столбцам:
newmat <- t(apply(orimat, 1, sort))