R函数计算变量列名的统计量

时间:2014-05-14 17:37:04

标签: r

抱歉发布不好的帖子......

我试图这样做:

function(pollutant)

##some code here

bad <- is.na(dataset$pollutant)
mean(dataset$pollutant[!bad])

哪里

dataset <- read.csv(file, header=TRUE)

该文件有多个污染物作为列名。如果我明确输入污染物名称而不是变量&#34;污染物&#34;代码有效。

例如:

function()

##some code here

bad <- is.na(dataset$CO2)
mean(dataset$CO2[!bad])

正确的语法是什么,所以我可以有一个可变的污染物名称?

2 个答案:

答案 0 :(得分:1)

您似乎在问如何使用作为函数参数传递的列名?

myfunction <- function(df, col) mean(df[,col], na.rm=T)

# test
set.seed(1)
df <- data.frame(x=rnorm(10),y=rnorm(10))
myfunction(df,"x")
# [1] 0.1322028

如果传递列号,这也有效。

myfunction(df,1)
# [1] 0.1322028

答案 1 :(得分:0)

您可能希望考虑避免编写函数,只使用R

中的with函数
> DF
#   col1 pollutant
# 1    1         4
# 2    2         5
# 3    3        NA
# 4    4         7
# 5    5         8
# 6    6        NA

> with(DF, mean(pollutant, na.rm = TRUE))
# [1] 6

> with(DF, mean(col1, na.rm = TRUE))
# [1] 3.5

如果需要函数,可以将列直接传递给函数

f <- function(column){
    mean(column, na.rm = TRUE)
}

> f(DF[, 'pollutant'])
# [1] 6

甚至可以在na.rm的自定义函数参数中将...作为参数传递。如果您在函数中进行多次计算需要使用相同的参数,这会更容易。

f2 <-function(column, ...){
    list(mean = mean(column, ...), 
         stDev = sd(column, ...), 
         var = var(column, ...))
}

> f2(DF[, 'pollutant'], na.rm = TRUE)
# $mean
# [1] 6

# $stDev
# [1] 1.825742

# $var
# [1] 3.333333