【问题标题】:creating an R function that takes names as arguments? [duplicate]创建一个将名称作为参数的 R 函数? [复制]
【发布时间】:2015-12-14 11:41:04
【问题描述】:

假设我有一个如下所示的数据框:

df1 <- data.frame("long name 1"=c(rnorm(n = 100, mean = 0, sd = 1),NA),
                  treatment=sample(x = c(0,1), size = 101, replace = T))
names(df1) <- c("long name 1", "treatment")

我想创建一个有 5 个参数的函数。现在我有这个:

test.f <- function(data, vname, tname, tvalue=1, cvalue=0) {
  vname<-as.name(vname)
  tname <- as.name(tname)
  mean.Xt <- mean(data$vname[data$tname==tvalue], na.rm = T)
}

当我运行它时,我收到以下错误:

test.f(data = df1, vname = "long name 1", tname = "treatment")
Warning message:
  In mean.default(data$vname[data$tname == tvalue], na.rm = T) :
  argument is not numeric or logical: returning NA

有没有办法做我想做的事?

【问题讨论】:

  • 人们有时真的应该开始阅读r-faqs。这个问题大约每天被问一次

标签: r


【解决方案1】:

在选择列的函数中最好使用[[ 而不是$

test.f <- function(data, vname, tname, tvalue=1, cvalue=0) {
    mean(data[[vname]][data[[tname]]==tvalue], na.rm = T)
 }

test.f(data = df1, vname = "long name 1", tname = "treatment")
#[1] 0.1397585

相同
mean(df1$`long name 1`[df1$treatment==1], na.rm=TRUE)
#[1] 0.1397585

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2019-03-05
    相关资源
    最近更新 更多