Подтвердить что ты не робот

Slick one-lineRs

Какой ваш любимый однострочный шрифт в R?

Включите короткий пример компаньона и ограничитесь одним кончиком за сообщение, пожалуйста. Заметьте, ; обманывает.

Пример: вычислить x[i] / x[i-1] для вектора x,

x <- 1:10
Reduce("/", as.data.frame(embed(x, 2)))

(собранный из R-help, я забываю, кто/когда)

Изменить: после некоторых начальных разногласий похоже, что вопрос снова открывается для записей.

4b9b3361

Ответ 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))