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

标签 r

我正在努力了解为什么这不起作用。

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/

相关文章:

r - 我如何才能发现Rscript已由CWL在docker上成功运行?

R - 如果某个列是统一的或包含不同的因子值,则按组指示

r - 在 R 公式中使用带有特殊字符的列

r - 更改分散参数后计算置信区间的快速方法

r - R中的滑动FFT

r - 如何根据单元格中的字符值对 gt 表中的单元格进行着色?

r - 从矩阵创建数据框

r twitter userTimeline 错误 oauth

r - 如何更改 ggplot2 中的线条和形状颜色?

r - 检查字符串中的多个值中的任何一个是否在数值范围 R 内