2015-02-24 5 views
-5

Я совершенно не знаком с R. Не могли бы вы объяснить мне следующий код? Большое вам спасибо заранее.Не могли бы вы помочь мне понять код R?

patterns <- matrix(c(0,0,0,1,0,1,0,1,1,1,1,0),4,3, byrow = T) 
input <- unlist(lapply(1:100, function(i) { 
    ps <- patterns[sample(nrow(patterns)),] 
    as.vector(t(ps)) 
})) 
teach <- c(input[-1],input[1]) 
data <- cbind(input, teach) 
+1

В какой части вы не понимаете? Если это буквально каждая строка, я предлагаю вам начать с базового учебника R (возможно [Введение в R] (http://cran.r-project.org/doc/manuals/r-release/R-intro.html)). Чтобы просмотреть страницу справки для любой команды, вы можете ввести '? Matrix' в R, чтобы вызвать справку для этой конкретной функции. – MrFlick

+0

Большое вам спасибо. Например, какова функция этой строки: c (input [-1], input [1]) – David

+1

Если это ваш конкретный вопрос, пожалуйста, обновите свое сообщение, чтобы указать это. Затем другие могут публиковать ответ ниже, и вы можете принять «правильный» ответ на свой вопрос. – MrFlick

ответ

1

Прежде всего, в общем,

var <- expr 

вычисляет выражение R ехрг и присваивает результат переменной вар. Если оператор возникает внутри функции, то var становится локально-локальной переменной, в противном случае он становится глобальной переменной.

c(0,0,0,1,0,1,0,1,1,1,1,0) 

Объединяет 12 double литералов в double вектора в указанном порядке.

matrix(c(0,0,0,1,0,1,0,1,1,1,1,0),4,3, byrow=T) 

Создает matrix из вектора с 4-х строк и 3 столбцов, заполнение матрицы по одной строке за один раз сверху вниз (слева направо в пределах каждой строки).

nrow(patterns) 

Возвращает количество строк в матрице patterns.

sample(nrow(patterns)) 

Возвращает integer вектора nrow(patterns) элементов, по существу случайным скремблирования множества целых чисел от 1 до nrow(patterns).

patterns[sample(nrow(patterns)),] 

Индекс patterns. Этот тип индексации в основном позволяет вам извлечь «подматрицу» исходной матрицы. Аргумент слева от запятой указывает строки для выбора, а справа указывает столбцы для выбора. Пропущенный аргумент эквивалентен заданию всех индексов этого измерения. Это конкретное выражение выбирает все строки и все столбцы в матрице, но скремблирует порядок строк.

t(ps) 

Переводит матрицу ps.

as.vector(t(ps)) 

Фланец транспонированной матрицы в вектор. Обратите внимание, что это по столбцу, что противоположно тому, как изначально была построена матрица из вектора. Обратите внимание, что поскольку это последний оператор в прилагаемой функции, он автоматически станет возвращаемым значением функции при ее выполнении.

function(i) { 
    ps <- patterns[sample(nrow(patterns)),] 
    as.vector(t(ps)) 
} 

Определяет функцию, принимая один параметр i и выполняет два заявления я объяснил выше. Обратите внимание, что patterns эффективно закрывается этой функцией.

1:100 

Создает integer вектор, состоящий из 100 элементов, целых чисел от 1 до 100.

lapply(1:100, function(i) { ... }) 

Выполнение функции, заданную во втором аргументе один раз для каждого элемента первого аргумента, передавая элемент в качестве первого аргумента функции, когда она вызывается для этого конкретного элемента. В этом случае результатом будет функция 100 раз, передавая целые числа от 1 до 100 в качестве аргумента для параметра i для каждого соответствующего вызова. lapply() всегда возвращает возвращаемое значение каждого отдельного выполнения функции, объединенного в объект list.

unlist(...) 

Преобразование list в единый гомогенный (без списка) объект. Как это работает, зависит от точной природы его аргумента, но в этом случае он будет комбинировать векторы, возвращаемые каждым вызовом функции в один вектор.

input[-1] 

Возвращает весь вектор input исключая его первый элемент.

input[1] 

Возвращает первый элемент вектора input.

c(input[-1],input[1]) 

Объединение двух предыдущих значений. Конечным результатом является то, что первый элемент был перенесен в конец вектора.

cbind(input, teach) 

Выполняет «связывание столбцов» двух вышеупомянутых векторов. Это означает, что каждый вектор будет обрабатываться как матрица length(vector) -by-1, и две матрицы будут объединены в матрицу -by-2. (Если длины не были равны, функция все равно будет успешной, но она будет перерабатывать любые короткие векторные входы и печатать предупреждающее сообщение.)

+0

Большое вам спасибо, вы очень милый. – David

-3
lmepair.df <- function(fixed, dataframe, name.ID, num.outcomes, method="REML", random.indep=F, random.group=NULL, use.lmer=F, group.weights=NULL, null.model=NULL, return.matrices=F, loglik.only=F, eigen.loglik.only=F, return.sigma=F, score=F, return.loglikfn=F){ 
    require(MASS) 
    if (use.lmer==F) 
    require(assist) # also loads nlme # 
    else 
    require(lme4)