R中圆括号(圆括号)的功能

时间:2015-08-13 01:39:11

标签: r data.table parentheses

R如何解释括号?像大多数其他编程语言一样,这些是内置的操作符,我通常不假思索地使用它们。

但是,我遇到了这个例子。假设我们在R中有一个<?php wp_pagenavi( array( 'type' => 'Professor' ) ); ?> ,我想在它的列上应用一个函数。然后我可能会写:

data.table

显然我不能忽视括号:

dt <- data.table(my_data)
important_cols <- c("col1", "col2", "col5")
dt[, (important_cols) := lapply(.SD, my_func), .SDcols = important_cols]

因为这会向我的dt[, important_cols := lapply(.SD, my_func), .SDcols = important_cols] 引入一个名为important_cols的新对象,而不是修改我现有的列。

我的问题是,为什么围绕向量put()“展开”呢?

这个问题可能更好地措辞和标题。但是如果我知道要问的术语,我可能会通过谷歌搜索找到答案,因此我就在这里。

虽然我们正在谈论这个话题,但如果有人能够指出[],{}等之间的差异以及它们应该如何使用,那么也会受到赞赏:)

1 个答案:

答案 0 :(得分:3)

R的一个特殊功能(与例如C ++相比)是各种括号实际上是函数。这意味着(a)a是不同的表达方式。第二个是a,而第一个是使用参数(调用的函数 a。以下是一些表达式树供您比较:

as.list(substitute( a ))
#[[1]]
#a

as.list(substitute( (a) ))
#[[1]]
#`(`
#
#[[2]]
#a

as.list(substitute( sqrt(a) ))
#[[1]]
#sqrt
#
#[[2]]
#a

注意最后一棵树的相似之处 - 一个是函数sqrt,另一个是"("。在R中的大多数地方,"("函数不执行任何操作,它只返回相同的表达式,但在data.table的特定情况下,它被“覆盖”(在引号中,因为它不完全是它是如何完成的,但在精神上它是做各种有用的操作。

这是另一个希望强调这一点的演示:

`(` = function(x) x*x
2
#[1] 2
(2)
#[1] 4
((2))
#[1] 16
相关问题