【问题标题】:How to create a loop in R to calculate a value for each column?如何在 R 中创建一个循环来计算每列的值?
【发布时间】:2020-05-26 08:56:40
【问题描述】:

我想计算下面数据集中每一列的标准差:

    a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9

我尝试创建这样的循环:

for (x in 1:3){
  sdcol=sd(data[,x])
}

但我收到以下错误:

Error in data[, x] : object of type 'closure' is not subsettable

你能帮我解决这样的循环吗?

谢谢

【问题讨论】:

  • apply(data, 2, sd)matrixStats::colSds(data)

标签: r loops sapply


【解决方案1】:

编辑

我建议你试试这个命令,它比for 循环更快。确保您的变量都是数字的。如果您的列包含缺失值,na.rm = TRUE 参数很有用

sapply(data, sd, na.rm = TRUE)

例子

sapply(iris[,1:4], sd, na.rm = TRUE)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
   0.8280661    0.4358663    1.7652982    0.7622377 

【讨论】:

  • 嗨,谢谢你的回答,我应用它并得到这个错误:> sapply(x[,1:3], sd) 错误:C 堆栈使用 15923808 太接近限制跨度>
  • 你的数据集有多大?您的工作区是否充满了对象,或者您的 RAM 已满?
  • 我运行命令 (> sapply(data[,1:3], sd)) 但我得到 NA 值:[1] NA NA NA NA NA NA NA NA NA
  • 这是因为您的列中缺少值。您需要添加na.rm = TRUE,它将被传递给函数sd。我在上面更新了我的答案。
【解决方案2】:

我们也可以使用

library(dplyr)
iris %>%
     summarise_at(1:4, sd, na.rm = TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2016-10-13
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2021-09-14
    相关资源
    最近更新 更多