如何在函数内部/内部使用?

raf*_*ufo 7 r

我很难理解为什么这不起作用.

df <- data.frame(a=1:10, b=1:10)

foo <- function(obj, col) {
   with(obj, ls())
   with(obj, print(col))
}
foo(df, a)
Run Code Online (Sandbox Code Playgroud)

[1]"a""b"

打印错误(col):找不到对象'a'

如果这确实有效:

with(df, print(a))
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 12

with它非常方便,可以提高交互式环境中的可读性,但是在编程环境中可能会伤害你的大脑,在这种环境中,你会在不同的环境中来回传递函数和处理事物.通常在R中,使用符号而不是名称是一种"语义糖",它在交互式使用中是方便和可读的,但对于编程[eg $,subset] 而略微弃用).如果你愿意妥协,只要使用名称("a")而不是符号(a),那么我建议回到更简单obj[[col]]而不是with在这里使用......

所以,作为一个独立的答案:

foo <- function(object,col) {
   print(names(object))
   print(object[[col]])
}
Run Code Online (Sandbox Code Playgroud)

如果你想允许多列(即一个字符向量)

foo <- function(object,col) {
   print(names(object))
   print(object[col])
}
Run Code Online (Sandbox Code Playgroud)

编辑:subset在@ hadley的建议中避免使用函数

(这会将答案打印为数据框,即使选择了单个列,也可能不是您想要的).