你能帮我理解一下R代码吗?

时间:2015-02-24 21:33:22

标签: r function matrix lapply cbind

我是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)

2 个答案:

答案 0 :(得分:1)

首先,一般来说,

var <- expr

计算R表达式 expr 并将结果赋给变量 var 。如果语句出现在函数内部,则 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 )

从4行3列的向量中创建matrix,从上到下一行填充一行(每行中从左到右)。

nrow(patterns)

返回patterns矩阵中的行数。

sample(nrow(patterns))

返回integer元素的nrow(patterns)向量,基本上随机地将整数集从1加载到nrow(patterns)

patterns[sample(nrow(patterns)),]

索引patterns矩阵。这种类型的索引基本上允许您提取&#34;子矩阵&#34;原始矩阵逗号左侧的参数指定要选择的行,右侧指定要选择的列。省略的参数等效于指定该维度的所有索引。此特定表达式选择矩阵中的所有行和所有列,但会对行顺序进行加扰。

t(ps)

转置矩阵ps

as.vector(t(ps))

将转置矩阵展平为矢量。请注意,这是按列,这与矩阵最初从向量构造的方式相反。请注意,因为这是封闭函数中的最后一个语句,所以它在执行时会自动成为函数的返回值。

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

定义一个带有一个参数i的函数,它执行我上面解释的两个语句。请注意,patterns已被此函数有效关闭。

1:100

创建一个由{100}个元素组成的integer向量,整数从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)

执行&#34; column-bind&#34;上述两个载体中的一个。这意味着每个向量将被视为length(vector) - by-1矩阵,两个矩阵将组合成length(vector) - by-2矩阵。 (如果长度不相等,则函数仍然会成功,但它会回收任何短矢量输入并打印警告消息。)

答案 1 :(得分:-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)