【问题标题】:Could you please help me to understand an R code?你能帮我理解一个R代码吗?
【发布时间】:2015-02-24 21:33:21
【问题描述】:

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

【问题讨论】:

  • 你不明白哪一部分?如果真的是每一行,我建议你从一个基本的 R 教程开始(可能是An Introduction To R)。要查看任何命令的帮助页面,您可以在 R 中键入 ?matrix 以显示该特定功能的帮助。
  • 非常感谢。比如这一行的作用是什么:c(input[-1],input[1])
  • 如果这是您的具体问题,请更新您的帖子以表明这一点。然后其他人可以在下面发布答案,您可以接受对您问题的“正确”答案。

标签: r function matrix lapply cbind


【解决方案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))

通过基本上随机打乱从 1 到 nrow(patterns) 的整数集,返回由 nrow(patterns) 元素组成的 integer 向量。

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

创建一个由 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)

对上述两个向量执行“列绑定”。这意味着每个向量将被视为一个length(vector)-by-1 矩阵,两个矩阵将组合成一个length(vector)-by-2 矩阵。 (如果长度不相等,该函数仍然会成功,但它会回收任何短向量输入并打印一条警告消息。)

【讨论】:

  • 非常感谢,你非常非常好。
【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多