我正在努力了解为什么这不起作用。
df <- data.frame(a=1:10, b=1:10)
foo <- function(obj, col) {
with(obj, ls())
with(obj, print(col))
}
foo(df, a)
[1] "a" "b"
Error in print(col) : object 'a' not found
如果这样做有效:
with(df, print(a))
最佳答案
with
方便使用并在交互式上下文中提高了可读性,但在编程上下文中将内容来回传递给函数并在不同环境中处理事物时,可能会伤害您的大脑。通常,在R中,使用符号而不是名称是一种“语义糖”,它在交互使用中既方便又易读,但在编程时不建议使用[例如, $
,subset
])。如果您愿意在使用名称("a"
)而不是符号(a
)方面做出妥协,那么我建议您退回到更简单的obj[[col]]
而不是在这里使用with
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
因此,作为一个独立的答案:
foo <- function(object,col) {
print(names(object))
print(object[[col]])
}
如果您想允许多列(即字符向量)
foo <- function(object,col) {
print(names(object))
print(object[col])
}
编辑:根据@hadley的建议,不要将
subset
与函数一起使用(即使选择了单列,这也将答案打印为数据框,而这可能不是您想要的)。
关于r - 如何在函数内部/内部使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060872/