你能帮我理解R代码吗?
Could you please help me to understand an R code?
我是 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)
首先,一般来说,
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)
Returns patterns
矩阵中的行数。
sample(nrow(patterns))
Returns integer
个包含 nrow(patterns)
个元素的向量,基本上是随机打乱从 1 到 nrow(patterns)
.
的整数集
patterns[sample(nrow(patterns)),]
索引patterns
矩阵。这种类型的索引基本上允许您提取原始矩阵的 "submatrix"。逗号左边的参数指定 select 的行,右边的参数指定 select 的列。省略的参数等同于指定该维度的所有索引。这个特定的表达式 select 矩阵中的所有行和所有列,但打乱了行顺序。
t(ps)
转置矩阵ps
。
as.vector(t(ps))
将转置矩阵展平为向量。请注意,这是按列排列的,这与之前从向量构建矩阵的方式相反。请注意,因为这是封闭函数中的最后一条语句,所以它会在执行时自动成为函数的 return 值。
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()
总是 return 每次执行函数的 return 值,组合成一个 list
对象。
unlist( ... )
将 list
转换为单个同类(非列表)对象。它的工作原理取决于其参数的确切性质,但在这种情况下,它将把每个函数调用编辑的向量 return 组合成一个向量。
input[-1]
Returns 整个向量 input
不包括其第一个元素。
input[1]
Returns向量的第一个元素input
.
c(input[-1],input[1])
合并前两个值。最终结果是第一个元素被移动到向量的末尾。
cbind(input, teach)
执行上述两个向量的 "column-bind"。这意味着每个向量将被视为一个 length(vector)
-by-1 矩阵,并且这两个矩阵将合并为一个 length(vector)
-by-2 矩阵。 (如果长度不相等,函数仍然会成功,但它会回收任何短向量输入并打印一条警告消息。)
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)
我是 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)
首先,一般来说,
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)
Returns patterns
矩阵中的行数。
sample(nrow(patterns))
Returns integer
个包含 nrow(patterns)
个元素的向量,基本上是随机打乱从 1 到 nrow(patterns)
.
patterns[sample(nrow(patterns)),]
索引patterns
矩阵。这种类型的索引基本上允许您提取原始矩阵的 "submatrix"。逗号左边的参数指定 select 的行,右边的参数指定 select 的列。省略的参数等同于指定该维度的所有索引。这个特定的表达式 select 矩阵中的所有行和所有列,但打乱了行顺序。
t(ps)
转置矩阵ps
。
as.vector(t(ps))
将转置矩阵展平为向量。请注意,这是按列排列的,这与之前从向量构建矩阵的方式相反。请注意,因为这是封闭函数中的最后一条语句,所以它会在执行时自动成为函数的 return 值。
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()
总是 return 每次执行函数的 return 值,组合成一个 list
对象。
unlist( ... )
将 list
转换为单个同类(非列表)对象。它的工作原理取决于其参数的确切性质,但在这种情况下,它将把每个函数调用编辑的向量 return 组合成一个向量。
input[-1]
Returns 整个向量 input
不包括其第一个元素。
input[1]
Returns向量的第一个元素input
.
c(input[-1],input[1])
合并前两个值。最终结果是第一个元素被移动到向量的末尾。
cbind(input, teach)
执行上述两个向量的 "column-bind"。这意味着每个向量将被视为一个 length(vector)
-by-1 矩阵,并且这两个矩阵将合并为一个 length(vector)
-by-2 矩阵。 (如果长度不相等,函数仍然会成功,但它会回收任何短向量输入并打印一条警告消息。)
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)