用户定义的函数在R中产生警告

时间:2014-08-09 20:47:59

标签: r function argument-passing type-conversion mean

我想写一个函数,它接受3个参数,并根据参数的值计算平均值。我正在使用的数据帧有3个变量,其中均值使用其中一个并且它包含数值。当我mean(df$v1, na.rm=TRUE)时,我收到警告:

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

我尝试mean(df$as.numeric(as.character(v1)), na.rm = TRUE)

Error in mean(df$as.numeric(as.character(v1)), na.rm = TRUE) : 
  attempt to apply non-function

不确定如何处理此问题。

3 个答案:

答案 0 :(得分:1)

如果您收到mean(df$v1, na.rm=TRUE)的警告,则可能表示您在数据输入中出错,导致数字被强制转换为字符,然后转换为因子。尝试:

str(df$v)

我预测你会发现这是一个因素列。您可以使用以下命令将其更改为数字:

df$v1 <- as.numeric(as.character(df$v1))

答案 1 :(得分:0)

你必须使用

mean(as.numeric(as.character(df$v1)), na.rm = TRUE)

答案 2 :(得分:0)

将因子转换为数字的建议方法是使用级别。来自as.factor帮助文件:

  

特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效。

示例:

> x=factor(10:20)
> as.numeric(levels(x))[x]
 [1] 10 11 12 13 14 15 16 17 18 19 20

请注意,这在逻辑上与:

相同
> x=factor(10:20)
> as.numeric(levels(x))[as.numeric(x)]
 [1] 10 11 12 13 14 15 16 17 18 19 20

因为因素是内部整数。