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()“展开”呢?
这个问题可能更好地措辞和标题。但是如果我知道要问的术语,我可能会通过谷歌搜索找到答案,因此我就在这里。
虽然我们正在谈论这个话题,但如果有人能够指出[],{}等之间的差异以及它们应该如何使用,那么也会受到赞赏:)
答案 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