我正在寻求有关R文档中展示的做法的指导,该做法是创建具有与函数参数相同名称的变量,或者为数据框及其某一列赋予相同的名称。后者可能导致这样的代码:
delay <- filter(delay(delay >= mean(delay)))
这让我感到困惑。
在data.frame {base}帮助页面上的示例中,fac = fac
:
(L3 <- LETTERS[1:3])
# "A" "B" "C"
(fac <- sample(L3, 10, replace = TRUE))
# "C" "C" "B" "A" "B" "A" "B" "A" "C" "C"
(d <- data.frame(x = 1, y = 1:10, fac = fac))
# x y fac
# 1 1 C
# 1 2 C
# . . .
关于fac = fac
:使用相同的名称命名多个对象/元素是否被认为是一种好习惯?似乎有可能令人困惑-我最初以为fac
是一个命名参数,然后一直在寻找它,但无济于事-但也许我错过了好处,而且实际上这样更简单。
答案 0 :(得分:1)
这可能会导致麻烦,因为R会首先尝试从本地环境(在函数环境内部)抢占,然后再从全局环境中抢夺,这可能导致意外的副作用。从风格上讲,我已经看到很多R程序员使用结尾的下划线来区分参数和函数变量。即
distance = function (velocity_ = 0, time_ = 0){velocity_ * time_}
velocity = 10
time = 5
#Call the function
distance(velocity_ = velocity, time_ = time)
答案 1 :(得分:1)
在非常简单的示例之外,将我的评论综合成一个答案,您绝对不应将变量的名称与函数参数相同。
好的变量名对于编写可读,可维护的代码至关重要。
f1 <- read.csv(file = file, col.names = col.names)
h2o_data <- read.csv(file = h2o_temp_export, col.names = h2otemp_headers)
如果您没有在示例1中编写代码,那么在没有阅读程序的其他部分或测试单独的代码行的情况下,无法表明该代码行的功能。
在示例2中,即使您从未看过代码,也知道h2o_data
包含来自h2o_temp_export
的.csv数据,并且col.names
已设置为特定于该数据集。
现在让我们假设您需要在示例1之后添加第二个数据集,假设您有一个具有不同列的不同文件,则可以编写:
f2 <- read.csv(file1, col.names = col.names1)
这是完全模棱两可的,对f1
或f2
来说什么也没有告诉您。更糟糕的是,您可以重写col.names
,将其设置为f2
的新值,而不是使用col.names1
。
下面的示例2:
co2_data <- read.csv(file = co2_concentration_export,
col.names = co2_concentration_headers)
因此,除非您编写一个最小的示例来突出显示一段代码的特定用法,例如那些data.frame
示例,否则对于传递给函数的其他对象,应始终使用特定的,有用的名称。
编辑:另请参见Hadley's Style Guide