Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中lappy的标签输出_R - Fatal编程技术网

R中lappy的标签输出

R中lappy的标签输出,r,R,我对R相当陌生(到目前为止一直在使用SAS/Stata),我主要用于生物统计学 我正在尝试对20个ish解释变量进行单变量线性回归,并将其中具有p值的变量移动到中,而不是将数据分离到不同的数据帧中,保留单个数据帧并输入预测变量的列名。下面是一个使用内置mtcars数据框的示例 my_lms = lapply(names(mtcars)[-grep("mpg", names(mtcars))], function(n) { lm(paste("mpg ~ ", n), data=mtcars)

我对R相当陌生(到目前为止一直在使用SAS/Stata),我主要用于生物统计学


我正在尝试对20个ish解释变量进行单变量线性回归,并将其中具有p值的变量移动到中,而不是将数据分离到不同的数据帧中,保留单个数据帧并输入预测变量的列名。下面是一个使用内置
mtcars
数据框的示例

my_lms = lapply(names(mtcars)[-grep("mpg", names(mtcars))], function(n) {
  lm(paste("mpg ~ ", n), data=mtcars)
})
然后可以打印摘要或置信区间,变量的实际列名将显示在输出中

lapply(my_lms, summary)
lapply(my_lms, confint)
在上面生成模型的代码中,我们使用
data
参数告诉
lm
使用哪个数据帧。然后我们在模型公式中使用列名,可以输入列名,就像我们在这里所做的那样,使用字符串而不是公式表达式。使用这种方法,实际变量名将显示在摘要输出中

如您所述,从模型公式中的一个或多个数据帧中获取向量会导致模型变量的列名不包含在摘要中。这也会导致一些辅助功能无法正常工作。例如:

m1 = lm(mtcars[,1] ~ mtcars[,6])
predict(m1, newdata=data.frame(wt=1:10))
这会产生一条警告信息:“newdata”有10行,但找到的变量有32行,并且
predict
使用用于拟合模型的数据而不是我们输入函数的新数据输出预测

如果使用列名的命名向量,则将命名由
lappy
输出的列表元素。这使得生成包含多个模型输出的单个数据帧成为可能,并添加一列来标记给定行所属的模型。例如:

library(broom)
library(purrr)

vars = names(mtcars)[-grep("mpg", names(mtcars))]

my_lms = lapply(setNames(vars, vars), function(n) {
  lm(paste("mpg ~ ", n), data=mtcars)
})

map_df(my_lms, tidy, .id="Predictor Variable")
map_df(my_lms, confint_tidy, .id="Predictor Variable")
map_df(my_lms, augment, .id="Predictor Variable")
map_df(my_lms, glance, .id="Predictor Variable")
要收集其他模型信息,可以执行以下操作,例如:

library(broom)
library(purrr)

vars = names(mtcars)[-grep("mpg", names(mtcars))]

my_lms = lapply(setNames(vars, vars), function(n) {
  lm(paste("mpg ~ ", n), data=mtcars)
})

map_df(my_lms, tidy, .id="Predictor Variable")
map_df(my_lms, confint_tidy, .id="Predictor Variable")
map_df(my_lms, augment, .id="Predictor Variable")
map_df(my_lms, glance, .id="Predictor Variable")
更新:回应评论:

  • names(mtcars)[-grep(“mpg”,names(mtcars))]

    names(mtcars)
    返回包含所有名称的向量,但我们希望排除
    mpg
    ,因为这是结果变量
    grep(“mpg”,names(mtcars))
    返回
    mtcars
    数据帧中
    mpg
    的索引位置,它恰好是
    1
    ,因为
    mpg
    是数据帧的第一列。因此,
    names(mtcars)[-grep(“mpg”,names(mtcars))]
    相当于
    names(mtcars)[-1]
    ,这意味着返回
    mtcars
    的所有列名的向量,位置1处的值除外。但是,我们使用了
    grep
    ,因为它允许我们排除具有给定名称的列,而不必知道其在数据帧中的索引位置。使用
    名称(mtcars)[-match(“mpg”,名称(mtcars))]
    可以获得相同的结果

    (事实上,后者更安全,因为
    names(mtcars)[-grep(“mpg”,names(mtcars))]
    将排除任何包含
    mpg
    作为其名称一部分的列;要强制
    grep
    只匹配
    mpg
    ,您可以执行
    grep(^mpg$”,names(mtcars))
    ,但这涉及到字符串匹配的细节,您现在可能不想担心这些细节。)

    您可以通过单独运行这些部分来了解这些函数的工作方式。例如,运行
    grep(“mpg”,名称(mtcars))

  • 为什么必须在:
    setNames(vars,vars)
    处两次输入参数vars

    vars
    是列名的向量
    setNames(vars,vars)
    为向量的每个元素指定一个名称。(运行
    setNames(vars,vars)
    查看输出并比较它与
    vars
    setNames
    有两个参数。第一个参数是要为其设置名称的对象。第二个参数是要指定的名称。
    setNames(vars,字母[1:length(vars)])
    将字母表的前10个字母指定为名称。)这将导致
    lappy
    使用这些名称作为
    my_lms
    中列表元素的名称。如果默认情况下,
    lappy
    只是使用输入值
    vars
    命名输出列表元素,那就太好了,但是它没有。避免
    setNames
    的一种方法是使用
    sapply
    而不是
    lapply
    ,但随后必须添加参数
    simplify=FALSE

    my_lms = sapply(vars, function(n) {
      lm(paste("mpg ~ ", n), data=mtcars)
    }, simplify=FALSE)
    
  • 当您使用:
    lm(粘贴(“mpg~”,n)
    时,您如何知道哪些变量R将使用
    mpg
    进行线性回归

    查看上面的
    sapply
    函数,它创建
    my_lms
    sapply
    lappy
    获取输入向量或列表(
    vars
    )并在该输入向量或列表的每个元素上运行一个函数。在这种情况下,我们指定要运行的函数是
    lm
    n
    是一个“伪函数”返回到输入向量
    vars
    的参数。因此,在函数
    n
    的第一次迭代中,是
    vars
    的第一个元素,即
    cyl
    。在第二次迭代中,
    n
    disp
    ,以此类推

  • map\u df
    是来自
    purrr
    包(它是
    tidyverse
    包套件的一部分)的函数。
    map
    相当于
    lappy
    sapply
    map\u df
    很方便,因为它返回数据帧而不是列表


  • 要了解更多关于这些东西的信息,你可能会发现这本免费的书很有帮助。

    你只需做:
    名称(摘要)啊,好吧,如果有一种更方便的方法来保留更多的信息那就好了。但是,如果没有这种方法,我会这样做。另外,通过上面的方法,我意识到总结输出并没有给我95%的贝塔系数置信区间。有没有一种方法可以有效地输出呢?对任何人来说东北铜