gpt4 book ai didi

r - R 中的点是什么意思——个人喜好、命名约定还是更多?

转载 作者:行者123 更新时间:2023-12-03 05:22:40 25 4
gpt4 key购买 nike

我(可能)不是指这里的“所有其他变量”,其含义类似于 var1~. 。我再次被指向 plyr 并查看了 mlply 并想知道为什么参数是用这样的前导点定义的:

function (.data, .fun = NULL, ..., .expand = TRUE, .progress = "none", 
.parallel = FALSE)
{
if (is.matrix(.data) & !is.list(.data))
.data <- .matrix_to_df(.data)
f <- splat(.fun)
alply(.data = .data, .margins = 1, .fun = f, ..., .expand = .expand,
.progress = .progress, .parallel = .parallel)
}
<environment: namespace:plyr>

那有什么用呢?这只是个人喜好、命名约定还是其他原因?通常,R 的功能非常强大,以至于我错过了一个以前很早就有人做过的技巧。

最佳答案

函数名称中的点可以表示以下任一含义:

  • 什么都没有
  • S3 方法中方法和类之间的分隔符
  • 隐藏函数名称
<小时/>

可能的含义

1。什么都没有

data.frame 中的点不分离data来自frame ,除了视觉上的之外。

2。 S3方法中方法和类的分离

plot是通用 S3 方法的一个示例。因此plot.lmplot.glm是调用 plot(lm(...)) 时使用的底层函数定义或plot(glm(...))

3。隐藏内部函数

在编写包时,有时在函数名称中使用前导点很有用,因为这些函数在某种程度上隐藏在一般 View 中。纯粹属于包内部的函数有时会使用它。

在这种情况下,“有点隐藏”只是意味着当您使用 ls() 列出对象时,变量(或函数)通常不会显示。 。给力ls要显示这些变量,请使用 ls(all.names=TRUE) 。通过使用点作为变量的第一个字母,可以更改变量本身的范围。例如:

x <- 3
.x <- 4

ls()
[1] "x"

ls(all.names=TRUE)
[1] ".x" "x"

x
[1] 3
.x
[1] 4

4。其他可能的原因

在哈德利的包中,他使用约定在函数名称中使用前导点。这是一种尝试确保在解析变量名称时,值解析为用户变量而不是内部函数变量的机制。

<小时/>

并发症

这种不同用途的混杂可能会导致非常困惑的情况,因为这些不同的用途可能会混合在同一个函数名称中。

例如,转换 data.frame到您使用的列表 as.list(..)

as.list(iris)

在本例中as.list是一个 S3 通用方法,并且您正在传递 data.frame到它。因此S3函数被称为as.list.data.frame :

> as.list.data.frame
function (x, ...)
{
x <- unclass(x)
attr(x, "row.names") <- NULL
x
}
<environment: namespace:base>

要获得真正壮观的东西,请加载 data.table打包看一下函数as.data.table.data.frame :

> library(data.table)

> methods(as.data.table)
[1] as.data.table.data.frame* as.data.table.data.table* as.data.table.matrix*

Non-visible functions are asterisked


> data.table:::as.data.table.data.frame
function (x, keep.rownames = FALSE)
{
if (keep.rownames)
return(data.table(rn = rownames(x), x, keep.rownames = FALSE))
attr(x, "row.names") = .set_row_names(nrow(x))
class(x) = c("data.table", "data.frame")
x
}
<environment: namespace:data.table>

关于r - R 中的点是什么意思——个人喜好、命名约定还是更多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7526467/

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