Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R–中的圆点是什么意思;个人偏好、命名惯例或更多?_R_Coding Style_Naming Conventions_Plyr - Fatal编程技术网

R–中的圆点是什么意思;个人偏好、命名惯例或更多?

R–中的圆点是什么意思;个人偏好、命名惯例或更多?,r,coding-style,naming-conventions,plyr,R,Coding Style,Naming Conventions,Plyr,我(可能)不是指“所有其他变量”,意思是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 <-

我(可能)不是指“所有其他变量”,意思是
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>
函数(.data、.fun=NULL、.expand=TRUE、.progress=“none”,
.parallel=FALSE)
{
if(is.matrix(.data)&!is.list(.data))

.data在名称的开头,它的工作方式类似于UNIX文件名约定,默认情况下保持对象隐藏

ls()
character(0)

.a <- 1

ls()
character(0)

ls(all.names = TRUE)
[1] ".a"
ls()
字符(0)

.a函数名中的点可以表示以下任何一种:

  • 没什么
  • S3方法中方法和类之间的分隔符
  • 隐藏函数名的步骤

可能意义 一点也不
data.frame
中的点不会将
数据
frame
分开,只是在视觉上分开

2.S3方法中方法和类的分离
plot
是通用S3方法的一个示例。因此
plot.lm
plot.glm
是调用
plot(lm(…)
plot(glm(…)

3.隐藏内部功能 在编写包时,有时在函数名中使用前导点很有用,因为这些函数在一般视图中是隐藏的。纯在包内部的函数有时会使用它

在此上下文中,“稍微隐藏”只是指当您使用
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
在本例中,
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>
> 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>

如果用户定义了一个函数.doSomething,并且懒得为参数指定所有roxygen文档,则编译包时不会产生错误

好问题。此外,在函数名中使用点(
is.na
as.data.frame
,…)在其他编程语言中并不常见,但我喜欢它。进一步的解释是:
purrr
包(purrr.tidyverse.org)现在增加了另一层含义,如
~.x+1
=
函数(x)x+1
。如果键盘将
键放在一个真正可以触及的位置,那么很多这种混淆都可以解决(比如,你知道,不是一个
购物
键…)你为什么要隐藏一些不是全局的对象?你也可以将变量或函数定义为一个点!比如
=1
(1)
。这真的很奇怪,尤其是在表达式中
*+。
:-)你说“有些隐藏”是什么意思?点不会改变变量的作用域,是吗?所以它的隐藏只是因为用户通常不会在变量名的开头使用点,对吗?但这不是“作用域”通常的含义。作用域通常用于全局/局部(to function,package,…),而不仅仅是隐藏在
ls()
(但仍然可以访问).哦,我明白你的意思了。
x
.x
的作用域行为是相同的。它们只是碰巧是不同的变量。我只在plyr中这样做,因为你想区分plyr函数的参数和plyr调用的函数的参数。plyr还有一个
函数。
get(“.”;function(…,.env=parent.frame()){structure(as.list(match.call()[-1]),env=.env,class=“quoted”)}
as.list(iris)
> as.list.data.frame
function (x, ...) 
{
    x <- unclass(x)
    attr(x, "row.names") <- NULL
    x
}
<environment: namespace:base>
> 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>