抱歉发布不好的帖子......
我试图这样做:
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])
正确的语法是什么,所以我可以有一个可变的污染物名称?
答案 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