广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >R语言中assign函数和get函数的用法
  • 440
分享到

R语言中assign函数和get函数的用法

2024-04-02 19:04:59 440人浏览 薄情痞子
摘要

assign函数在循环时候,给变量赋值,算是比较方便 1、给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("Nginx

assign函数在循环时候,给变量赋值,算是比较方便

1、给变量赋值


for (i in 1:(length(rowSeq)-1)){
  assign(paste("Nginx_server_fields7_", i, sep = ""), nginx_server_fields7[(rowSeq[(i-1)+1]):(rowSeq[i+1]), ])
}

2、通过for循环给变量a1、a2、a3赋值


for (i in 1:3){
    assign(paste("a", i, sep = ""), i:10)
}
ls()
[1] "a1" "a2" "a3" "i"
> a1
 [1]  1  2  3  4  5  6  7  8  9 10
> a2
[1]  2  3  4  5  6  7  8  9 10

3、get和assign联合用法


rm(list = ls())  #这个命令千万慎重使用
for(i in 1:3){
     assign(paste("p", i, sep=""), i)
     tmp <- get(paste("p", i, sep=""))
     print(tmp)
 }
[1] 1
[1] 2
[1] 3
 ls()
[1] "i"   "p1"  "p2"  "p3"  "tmp"

补充:R语言函数的简单理解

R语言结合了面向对象编程语言和函数式编程语言的特性,由于拥有函数式编程的特性,R的每一个运算符,实际上也是函数,同样,面向对象的特性决定了你接触到的R中所有东西(从数字到字符串到矩阵等)都是对象。

这些综合的特质决定了R这门语言的特殊性,最大的特点就是开源,R中有许多用户无私贡献的包,通过这些包,可以实现强大的功能,因此,在在的统计处理或者数据挖掘等数据处理相关工作中,R常常作为数据预处理和建立初步模型的强大工具,但作为一门解释型语言,R的运行效率比不上同等下的C等编译型语言,特别是在高性能计算中。

因此,个人认为未来或者是现在将流行这样一种数据处理方式:用R对数据进行预处理,同时通过R建立初步的数据处理模型,待对模型进行评估并确定如何实施之后通过更高效的语言(C语言等)来实现。

R中变量作用域的层次结构同C语言类似,但最大的不同在于,在R函数中可以创建新的函数,这样会增加新的层次。

R拥有函数式编程的特性,基于函数式编程语言的特征,函数不会修改非局部变量,在R中,函数几乎没有副作用,简单的理解为,函数的一般代码可以读但是不能写非全局变量(当然通过特定函数是可以修改全局变量的)。

一般代码表面上可以给全局变量重新赋值,但实际上这些操作只会修改全局变量在特定层次中的备份,而全局变量本身不会发生变化。如下面例子所示:


i <- 1
test <- function(){
   i <- 2
   print(sprintf("the value from test(): %i", i))
}
test()
print(sprintf("the value from global:%i", i))

执行以上代码,结果如下所示:

在以上代码中,i是全局变量,顺序执行test()函数,在test中给i赋值为2,此时打印的结果是局部变量中的值。test()函数执行完之后再打印i的值,结果却仍然是1,说明test中的赋值并没有修改全局变量i。

一般情况下,使用R中的函数不会有副作用,可以有以下几点理解:

1)只引用而不改变全局变量,局部变量与全局变量共享内存空间,此时的值必然相同;

2)一旦函数对全局变量重新赋值,系统将会创建一个与全局变量同名的新变量,并为这个变量分配新的内存空间,但这个新变量只处在宿主函数这个层次中,根据变量的引用关系,优先引用离自己较近的本层或者上层环境中变量,所以在该函数中基本上只会用全局变量的同名局部变量了;

3)随着函数调用结束,系统会释放函数中的局部变量,新创建的全局变量的同名局部变量也将销毁,而全局变量的值并没有因为在函数中使用而发生变化。

当然,R中也提供了特定的函数来对函数的上级层次进行写操作,那就是<<-和assign()。

1.超赋值运算符<<-的机理为:使用<<-进行赋值操作

系统会从第一个上级层次开始,由低到高逐层进行查找,直到在某个层次中找到该变量,如果找不到该变量,系统会在顶层环境中创建一个新的变量。注意,超赋值运算符<<-只查上级,不会对本级进行查找。

如下例所示:

A)


i <- 1
testA <- function()
{
   i <<- 2
   print(sprintf("the value from testA(): %i", i))
}
testA()
print(sprintf("the value from global:%i", i))

B)


testB<-function()
{
   i<<-2
   print(sprintf("the value from testB(): %i", i))
}
testB()
print(sprintf("the value from global:%i", i))

结果如下:

A)

B)

两次运行的结果相同,在A)中,<<-修改了全局变量值i,在testA函数中引用了修改后的值,结果为2,在B)中,<<-向上查找,没有找到名为i的全局变量,但是系统在全局环境中创建了名为i的全局变量并为其赋值为2。

2.使用assign()函数来对非局部变量进行写操作

该函数的特性为:向指定层次(本级或上级)中的某个变量赋值,有则修改,无则创建。

如下代码所示:


test <-function()
{
    i <- 1 
    innertest<-function(x)
    {
         i<-3
         assign("i",2*x,pos=.GlobalEnv)
         print(sprintf("the value from innertest(): %i",i))
  }
  innertest(5)
  print(sprintf("the value from test(): %i", i)) 
}
test()
print(sprintf("the value from global:%i", i))

结果为:

由结果可知,在test()和innertest()中的i值都没有发生变化,而在最顶层的全局层次中没有定义i的值,结果显示该值为10。

原因在于,在函数test()内部定义的函数innertest()中执行了assign函数,该函数在最顶层全局层次中的变量i赋值10,但是该层中并没有该变量,于是就就在最顶层.GlobalEnv中创建了该变量i并给其赋值,这样在不同的函数层次中都有变量i,优先引用离自己最近的同级(已顺序执行)或者上级层次中的变量,所以i出现了三个不同的输出值。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: R语言中assign函数和get函数的用法

本文链接: https://www.lsjlt.com/news/124244.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • R语言中assign函数和get函数的用法
    assign函数在循环时候,给变量赋值,算是比较方便 1、给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx...
    99+
    2022-11-12
  • R语言中assign函数和get函数怎么用
    这篇文章主要介绍了R语言中assign函数和get函数怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是R语言R语言是用于统计分析、绘图的语言和操作环境,属于GNU系...
    99+
    2023-06-14
  • R语言中assign函数怎么使用
    在R语言中,`assign`函数用于将一个值指派给一个变量名。其使用格式如下:```Rassign(x, value, envir ...
    99+
    2023-10-09
    R语言
  • R语言中xtabs函数的用法
    这篇文章将为大家详细讲解有关R语言中xtabs函数的用法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。今天在做一个列联表独立性检验的时候,总是无法处理好要求的数据类型,偶然的机会,看到了xtabs()函数...
    99+
    2023-06-14
  • R语言中qplot()函数的用法说明
    ggplot2()函数 ggplot2是一个强大的作图工具,它可以让你不受现有图形类型的限制,创造出任何有助于解决你所遇到问题的图形。 qplot() qplot()属于ggplot...
    99+
    2022-11-12
  • R语言中cut()函数的用法说明
    R语言cut()函数使用 cut()切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码。 参数:breaks:两个或更多个唯一切割点或单个数字(大于或等于2)的数...
    99+
    2022-11-12
  • R语言中quantile()函数的用法说明
    在R语言中取百分位比用quantile()函数,下面举几个简单的示例: 1、求某个百分位比 > data <- c(1,2,3,4,5,6,7,8,9,10) >...
    99+
    2022-11-12
  • R语言-summary()函数的用法解读
    summary():获取描述性统计量,可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等。 结果解读如下: 1. 调用:Call lm(f...
    99+
    2022-11-12
  • R语言seq()函数的调用方法
    看到有很多读者浏览了这篇文章,心里很是开心,为了能够更好地帮助大家,决定再修改一下,帮助大家更好地理解。 --------修改于:2018年4月28日 为了方便大家在开发环境中直接实...
    99+
    2022-11-11
  • 聊聊R语言中Legend 函数的参数用法
    如下所示: legend(x, y = NULL, legend, fill = NULL, col = par("col"), border = "black", lty, l...
    99+
    2022-11-11
  • R语言 title()函数的参数用法说明
    如下所示: title(main = NULL, sub = NULL, xlab = NULL, ylab = NULL, line = NA, outer = FALS...
    99+
    2022-11-12
  • R语言中qplot()函数怎么用
    这篇文章主要介绍了R语言中qplot()函数怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ggplot2()函数ggplot2是一个强大的作图工具,它可以让你不受现有图...
    99+
    2023-06-14
  • R语言中merge函数详解
    1、创建测试数据: name <- c('A','B','A','A','C','D') school <- c('s1','s2','s1','s1','s1','...
    99+
    2022-11-12
  • R语言中aggregate 函数详解
    目录R语言中aggregate 函数001、测试数据框002、 调用函数R语言中aggregate 函数 aggregate函数是数据处理中常用到的函数,具有强大的功能。可以按照要求...
    99+
    2023-05-17
    R语言aggregate 函数 aggregate 函数
  • R语言中Legend 函数的参数怎么用
    本篇内容介绍了“R语言中Legend 函数的参数怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如下所示:legend(x, ...
    99+
    2023-06-14
  • R语言Legend函数怎么用
    这篇文章主要介绍R语言Legend函数怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!legend(x, y = NULL, legend, fill ...
    99+
    2023-06-14
  • R语言中title()函数参数怎么用
    这篇文章将为大家详细讲解有关R语言中title()函数参数怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如下所示:title(main = NULL, sub ...
    99+
    2023-06-14
  • R语言函数详解及实例用法
    函数是一组组合在一起以执行特定任务的语句。 R 语言具有大量内置函数,用户可以创建自己的函数。 在R语言中,函数是一个对象,因此R语言解释器能够将控制传递给函数,以及函数完成动作所需...
    99+
    2022-11-12
  • R语言strsplit函数用法深入详解
    1、R语言strsplit用于分割字符串 创建测试数据 > test <- "aa bb cc dd ee ff" ##创建测试数据 > test [1] "a...
    99+
    2022-11-11
  • r语言中scale函数怎么使用
    在R语言中,scale函数用于对数据进行标准化处理。它可以将数据集的每个特征(列)进行标准化,使其均值为0,标准差为1。scale函...
    99+
    2023-09-13
    r语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作