【问题标题】:For-loop error in rstudio says 'undefined columns'rstudio 中的 For 循环错误说“未定义的列”
【发布时间】:2021-09-26 02:18:12
【问题描述】:

我一直在玩一些 for 循环和函数,但我不能完全让它们工作。我生成了四列随机数,每列有 300 行,并将它们收集到一个数据框中。

numbers <- runif(300, min = 0, max = 250)

numbers <- as.data.frame(numbers)

numbers$numbers2 <- runif(300, min = 0, max = 300)

numbers$numbers3 <- runif(300, min = 0, max = 350)

numbers$numbers4 <- runif(300, min = 0, max = 400)

numbers <- as.data.frame(numbers)

然后我创建了一个函数来计算每列中数字的 z 分数:

newfunction <- function(x){    
x_stand <- (x-mean(x))/sd(x)
return(x_stand)    
}

我想在 for 循环中实现该函数并计算所有四列的 z 分数,但是当我尝试运行以下代码时收到一条错误消息:

for (i in numbers[,1:4]) {    
  z_scores[i] <- newfunction(numbers[,i])    
}

错误消息显示:[.data.frame`(numbers, , i) : undefined columns selected

我只想使用 for 循环计算“数字”数据框中每个变量/列的 z 分数,并将这些计算插入一个名为 z_scores 的数据框中,这样最终的 z_scores 数据框包含四个新列每个都包含对应于“数字”数据框中第 i 列的 z 分数。

谁能告诉我需要修复什么才能让我的 for 循环正常工作?

谢谢

【问题讨论】:

  • 尝试使用(i in 1:4),但您将遇到另一个问题,因为您没有提前创建z_scores 数据框。您可以在循环之前执行z_scores &lt;- numbers 以快速解决此问题。
  • 为什么不直接使用numbers.z &lt;- scale(numbers)
  • 我只是在玩函数和 for 循环来自学:) 我尝试创建一个分配给数字的 z_scores 数据框并将 for 循环更改为 for (i in 1:4) .. . 总的来说,它现在看起来如下: z_scores
  • @Ben 非常感谢,它工作得很好! :)

标签: r dataframe function for-loop undefined


【解决方案1】:

问题在于您的循环条件for (i in numbers[,1:4])。在循环的每次迭代中,这会将 i 设置为相应列的向量,not 设置为 列名,这似乎是您的意图。

您可以通过以下任一方式获得所需的性能:

for (i in colnames(numbers[,1:4])) {    
  z_scores[i] <- newfunction(numbers[,i])    
}

for (i in numbers[,1:4]) {    
  z_scores[i] <- newfunction(i)   # Since i is the vector of values, there is no need to subset the dataframe numbers
}

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多