r - R - 在函数内对数据框进行子集化时选择了未定义的列
问题描述
嗨,我有一个名为“结果”的数据框,其中有一列名为“肺炎”,还有一些其他列,如“状态”和“医院名称”
当我在命令行中运行时
outcome <- read.csv("Assigment3/outcome-of-care-measures.csv", colClasses = "character")
temp <- subset(outcome, State =="NY", select=c(Hospital.Name, Pneumonia)
它可以工作,并创建带有两列 Hospital.Name 和 Pneumonia 的临时数据框。
但是当我创建一个包含相同指令的函数时
state 是 state 列中的一个值,outcome1 只是列名
best <- function(state, outcome1) {
outcome <- read.csv("Assigment3/outcome-of-care-measures.csv", colClasses = "character")
temp <- subset(outcome, State ==state, select=c(Hospital.Name, outcome1))
}
我调用这个函数:
best("NY","Pneumonia")
我得到错误:
[.data.frame`(x, r, vars, drop = drop) 中的错误:选择了未定义的列
我知道问题出在outcome1
变量上,因为如果我outcome1
在上面的函数中硬编码,而不是将其作为参数传递,函数会按预期工作。
解决方案
我认为你需要get
在你outcome1
的函数定义中,因为你传递一个字符串而不是一个对象作为你的参数。使用此示例数据:
outcome <- data.frame(Pneumonia = sample(0:1, size = 5, replace = TRUE),
State = c("NY", "NY", "NY", "CA", "CA"),
Hospital.Name = LETTERS[1:5]
)
而这个修改后的功能:
best <- function(df_, state_, var_) {
subset(df_, State == state_, select = c(Hospital.Name, get(var_)))
}
现在您可以像以前一样或多或少地调用它:
> best(df_ = outcome, state_ = "NY", var_ = "Pneumonia")
Hospital.Name Pneumonia
1 A 0
2 B 1
3 C 0
推荐阅读
- c# - 使用 c# 和 WooCommerceNET 从 woocomerce 获取嵌套数据
- eclipse - Eclipse Markdown 表不呈现
- prestashop - Prestashop:运费乘以购物车中的每个产品
- angular - Angular:有没有办法在不知道键名的情况下检索查询参数值?
- typescript - 从可区分联合数组中查找的窄返回类型
- javascript - 防止使用 Javascript 加载图像
- go - 处理依赖注入
- vba - SQL 查询中的日期变量
- php - 参数值在moodle中丢失
- javascript - 如果定义了 URL 中的变量,如何更新 href