gpt4 book ai didi

r - R中括号(圆括号)的作用

转载 作者:行者123 更新时间:2023-12-01 02:06:46 29 4
gpt4 key购买 nike

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

但是,我遇到了这个例子。假设我们有一个 data.table在 R 中,我想在它的列上应用一个函数。那我可能会写:

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 的新对象到我的 data.table ,而不是修改我现有的列。

我的问题是,为什么将 ( ) 放在向量周围“扩展”它?

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

当我们讨论这个话题时,如果有人能指出 []、{} 等之间的区别,以及它们应该如何使用,那也将不胜感激:)

最佳答案

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

关于r - R中括号(圆括号)的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31978144/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com