【问题标题】:specifying a numeric list within a function在函数中指定数字列表
【发布时间】:2020-09-09 07:09:12
【问题描述】:

我正在编写以下函数来创建相关矩阵并找到高度相关 (>0.75) 的值:

var.cor <- function(data, cols){
  cor.mat <- cor(data [, cols])
  cor.mat <- round(cor.mat, 2)
  high.corr <- findCorrelation(cor.mat, cutoff = 0.75)
  print(cor.mat)
  print(high.corr)
} 

我想给函数一个列号范围(即var.cor(data =dat, 10:20) 将为列 10:20 运行函数。在第二行指定 cols 的正确方法是什么?功能?当我运行var.cor("dat1", 10:20) 时,我收到一条错误消息: Error in data[, cols] : incorrect number of dimensions

【问题讨论】:

标签: r function functional-programming


【解决方案1】:

您的 data 参数只提供字符串,如以下示例中的 "mtcars"。使用get.GlobalEnv 中获取具有此名称的对象。 例子:

var.cor <- function(data, cols){
  cor.mat <- cor(get(data, envir=.GlobalEnv)[, cols])
  cor.mat <- round(cor.mat, 2)
  high.corr <- caret::findCorrelation(cor.mat, cutoff = 0.75)
  print(cor.mat)
  print(high.corr)
} 
var.cor("mtcars", cols=1:2)
#       mpg   cyl
# mpg  1.00 -0.85
# cyl -0.85  1.00
# [1] 2

【讨论】:

  • 这是正确的 - 我在第一次阅读问题时错过了引号。
【解决方案2】:

您应该向我们提供有关您的变量“数据”的一些信息(它似乎没有 10 列)。使用内置的iris 数据集进行一次更改(见下文),您的代码对我来说可以正常工作:

var.cor <- function(data, cols){
  cor.mat <- cor(data [, cols])
  cor.mat <- round(cor.mat, 2)
  high.corr <- cor.mat > 0.75
  print(cor.mat)
  print(high.corr)
} 
> var.cor(iris, 1:3)
             Sepal.Length Sepal.Width Petal.Length
Sepal.Length         1.00       -0.12         0.87
Sepal.Width         -0.12        1.00        -0.43
Petal.Length         0.87       -0.43         1.00
             Sepal.Length Sepal.Width Petal.Length
Sepal.Length         TRUE       FALSE         TRUE
Sepal.Width         FALSE        TRUE        FALSE
Petal.Length         TRUE       FALSE         TRUE

你没有分享你的findCorrelation函数,但它似乎只是一个过滤器(我在上面添加了high.corr &lt;- cor.mat &gt; 0.75

简而言之,您的问题的实际答案似乎是您的“数据”变量不是您认为的形状。

【讨论】:

    猜你喜欢
    • 2020-11-09
    • 2020-07-12
    • 2014-05-23
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多