【问题标题】:Passing variable name in a function在函数中传递变量名
【发布时间】:2019-06-11 09:12:09
【问题描述】:

我试图在函数中传递变量的值并在一个简单的公式中使用它,但不能。它给了我以下错误

data$column_namep 中的错误:$ 运算符对原子向量无效

代码如下:

test = function(func,data="file3",column_name,x=1){
  func(data$column_name[x])
}

test(sum,column_name = "chemical")

预期的结果是我得到 column_name“化学”的总和

【问题讨论】:

  • 试试:data[[column_name]][x]
  • 数据错误[[column_name]]:下标越界。我收到此错误
  • 我明白了.. 尝试代替数据get(data)
  • 如果你提供了一个可重现的例子,这个问题会很快解决

标签: r function variables


【解决方案1】:

您可以添加一个检查数字类型的语句:

 summer<-function(func,df,col.name){
  x<-df
  mynames<-names(df)
  col.name1<-which(mynames==col.name)
  x<-func(df[col.name1])
  x
  }

summer(sum,iris,"Sepal.Width")

summer(sum,iris,"Sepal.Width")
[1] 458.6

【讨论】:

    【解决方案2】:

    通过 column_name 获取总和。您可以使用索引(不需要使用列名,我更喜欢这个)或列名来访问列数据。以下代码提供了第 2 列的总和,即 "Sepal.Width"iris 数据集。

    test = function(func,data=iris,x){
      func(data[,x]) # Can access data using column index or name
    }
    
    test(sum,x=2) or test(sum,x="Sepal.Width")
    

    输出:

    [1] 458.6
    

    【讨论】:

      【解决方案3】:

      这并不是说对一个元素求和有多大意义,这是一个运行没有错误的代码:

      test = function(func,data="file3",column_name,x=1){
        func(get(data)[[column_name]][x])
      }
      
      file3 <- iris
      test(func = sum, column_name = "Sepal.Length")
      [1] 5.1
      

      【讨论】:

        猜你喜欢
        • 2011-05-17
        • 2017-07-21
        • 2011-02-26
        • 2013-10-08
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多