当尝试使用我的函数时,出现 "参数不是数字或逻辑:返回NA "错误。谁能帮我调试一下?

问题描述 投票:0回答:1

我目前有一个函数 "get_col_mean",它应该接收数据框和数据框中存在的列名,并取各列中数值的平均值。

get_col_mean <- function(data_frame, column_name){
  return(mean(data_frame$column_name, na.rm = TRUE))
}

然而,当我试图用数据框 "life_exp "和列名 "X1900 "来做这件事的时候,

test2 <- get_col_mean(life_exp, "X1900")
test3 <- get_col_mean(life_exp, X1900)
#(not sure which one of these is supposed to work; one of them should work, but as of now, neither work)

我得到一个错误。

Warning message:
In mean.default(data_frame$column_name, na.rm = TRUE) :
  argument is not numeric or logical: returning NA

然而,当我把这一行输入到我的函数中,作为我的返回行,在一个单独的行中,这样,它就完美地工作了。

test1 <- mean(life_exp$X1900, na.rm = TRUE)

它工作得很完美,我收到的是列中数值的平均值。

有人知道我的函数有什么问题吗?我想附上一张life_exp data.frame的图片,但我找不到任何方法(第一次使用这个网站)。我想解释一下,所有的行代表一个国家,所有的列代表一个年份(X1900是1900年)。行 "阿富汗 "+列 "X1900 "将给出一个数字,代表1900年阿富汗人的预期寿命。

r rstudio
1个回答
0
投票

如果我们想传递一个字符串,使用 [[ 而不是 $

get_col_mean <- function(data_frame, column_name){
          mean(data_frame[[column_name]], na.rm = TRUE)
      }
get_col_mean(life_exp, "X1900")

举一反三

data(mtcars)
get_col_mean(mtcars, 'mpg')
#[1] 18.72

对于第二种情况,即传递未引用的列名,我们可以使用 deparse(substitute

get_col_mean <- function(data_frame, column_name){
          mean(data_frame[[deparse(substitute(column_name))]], na.rm = TRUE)


      }

get_col_mean(life_exp, X1900)

同样的可重复的例子

get_col_mean(mtcars, mpg)
#[1] 18.72

问题是 $ 将寻找传递的字面值,即'column_name',而不是传递的值。

© www.soinside.com 2019 - 2024. All rights reserved.