首页 > 其他分享 >直接写和放在函数中不同的R语言用法

直接写和放在函数中不同的R语言用法

时间:2023-04-21 12:38:45浏览次数:42  
标签:语言 ## lm 用法 df 对象 formula data 函数


索引数据框中的某一列

df$A可以索引数据框df中列名为A的列的所有值。那么假如列名是一个R对象怎么做?

df <- data.frame(A=1:5, B=(1:5)*2)

df$A

## [1] 1 2 3 4 5

needed_column = 'A'

# df$needed_column ? Wrong

# 注意是双方括号
df[[needed_column]]

## [1] 1 2 3 4 5

ggplot2绘图中指定所需的列信息

ggplot绘图时,可以直接提供列名字(如下面的AB分别指定为x轴和y轴)指定绘图属性,但如果列名字是一个R对象呢?这一情况常发生于自定义函数时。

library(ggplot2)

ggplot(data=df, aes(x=A, y=B)) + geom_point()

如下:就需要使用sym!!了,都来源于rlang包。

  1. sym把一个R字符串对象转换为一个symbol
  2. (bang-bang操作符)!!则把symbol再转回R字符串对象,等同于直接写这个对象。

看新的例子中,xvariable="A"xvariable_en <- sym(xvariable)转换为了symbolaes(x=!!xvariable_en)等同于直接写aes(x=A)。兜兜转转,2步转换把想传的值传进去了。

# 注意sym和!!的使用
#
ggplot_points <- function(data, xvariable, yvariable){
  xvariable_en <- sym(xvariable)
  yvariable_en <- sym(yvariable)
  ggplot(data, aes(x=!!xvariable_en, y=!!yvariable_en)) +
    geom_point()
}

ggplot_points(df, "A", "B")

另外还有syms!!!,则可以转换向量、列表对象。

library(dplyr)
df %>% select(A,B)

##   A  B
## 1 1  2
## 2 2  4
## 3 3  6
## 4 4  8
## 5 5 10

# 等同于
columns <- c("A","B")
columns_en <- syms(columns)
df %>% select(!!!columns_en)

##   A  B
## 1 1  2
## 2 2  4
## 3 3  6
## 4 4  8
## 5 5 10

写个公式 (formula)

公式 (formula)是一个在运算和绘图中常用的形式,直接写公式A~B可以,但如果是用对象构造公式呢?

lm(A~B, data=df)

## 
## Call:
## lm(formula = A ~ B, data = df)
## 
## Coefficients:
## (Intercept)            B  
##   1.192e-15    5.000e-01

通过as.formula转换

y = 'A'
z = 'B'

formula1 <- as.formula(paste(y,"~", z))
lm(formula1, data=df)

## 
## Call:
## lm(formula = formula1, data = df)
## 
## Coefficients:
## (Intercept)            B  
##   1.192e-15    5.000e-01

当然下面这个“神奇”的写法也可以,整个表达式构建一个字符串,再解析执行出来。

eval(parse(text=paste("lm(", y, "~", z, ", data=df)")))

## 
## Call:
## lm(formula = A ~ B, data = df)
## 
## Coefficients:
## (Intercept)            B  
##   1.192e-15    5.000e-01


直接写和放在函数中不同的R语言用法_java

标签:语言,##,lm,用法,df,对象,formula,data,函数
From: https://blog.51cto.com/u_16077014/6212495

相关文章

  • oracle function 函数
    oraclefunction的几个实例,只限入门,高手路过 --********thesimplestexampleoffunction--tip:canusesqltodirectlycallthefunctionwithinmoduleparametercreateorreplacefunctionget_customer_namereturnvarchar2isv_uservarchar2(100);begins......
  • Python学习(2)-NumPy矩阵与通用函数
    1.NumPy矩阵1.1mat函数mat=asmatrixasmatrix(data,dtype=None):data:表示输入的数组或者字符串,使用‘,’分割列,使用‘;’分割行创建两个普通的矩阵:print(np.mat([1,2,3]))print(np.mat("1,2,3;4,5,6;7,8,9"))--------[[123]][[123][456][789]]需要注意:mat创建的......
  • 【题解】P5327 [ZJOI2019] 语言
    P5327[ZJOI2019]语言题目描述九条可怜是一个喜欢规律的女孩子。按照规律,第二题应该是一道和数据结构有关的题。在一个遥远的国度,有\(n\)个城市。城市之间有\(n-1\)条双向道路,这些道路保证了任何两个城市之间都能直接或者间接地到达。在上古时代,这\(n\)个城市之间处......
  • 虚函数计算各种图形面积
    定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle(长方形)、Trapezoid(梯形)和Triangle(三角形),用虚函数分别计算各种图形的面积,并求出它们的和。要求用基类指针数组。使它的每一个元素指向一个派生类的对象。PI=3.1415926输入格式:请在这里写输入格式。......
  • 机器学习的一些基本概念(函数/标准化/梯度下降/正则化)
    基本概念各种函数损失函数(LossFunction)度量单样本****或者一个批次的样本预测的错误程度,损失函数越小,模型就越好。常用的损失函数包括:0-1损失函数、平方损失函数、绝对损失函数、对数损失函数等代价函数(CostFunction)度量全部样本集的平均误差。常用的代价函数包括均方误差、......
  • scapy函数介绍
    1、读取报文>>>packets=rdpcap("d.pcap")2、查看原始数据>>>raw(packets[0])b'\x00\x16>3\x02d\x00\x16>\\\xf2\xa3\x08\x00E\x00\x00(\x00\x01\x00\x00@\x063\x18\xc0\xa8\x05;\xb5*\xcc\xa9$\xfc\x01\x......
  • 关于浏览器的Selection对象,以及window.getSelection()的API用法
    Selection 对象就是用户选择的文本范围或插入符号的位置。它代表页面中的文本选区,可能横跨多个元素。文本选区由用户拖拽鼠标经过文字而产生。具有以下属性和方法。 1、anchorNode只读属性,返回选区开始位置所属的节点。用户可能从左往右框选,也可能从右往左框选。但是锚点......
  • Python | isinstance函数的使用
    isinstance是一个Python内置函数,用于检查一个对象是否是指定类或其子类的实例。isinstance(obj,cls)返回一个布尔值,表示obj是否是cls或其子类的实例。类似type()。isinstance()与type()区别:type()不会认为子类是一种父类类型,不考虑继承关系。isinstance()会认......
  • [oeasy]python0135_命名惯用法_name_convention
    命名惯用法回忆上次内容上次了解了isidentifier的细节关于关键字关于下划线如何查询变量所指向的地址?id如何查询已有的各种变量?locals如果用一个变量a的值给另一个变量b赋值是什么样的过程呢??......
  • [oeasy]python0135_命名惯用法_name_convention
    命名惯用法回忆上次内容上次了解了isidentifier的细节关于关键字关于下划线 如何查询变量所指向的地址?id 如何查询已有的各种变量?locals 如果用一个变量a的值给另一个变量b赋值是什么样的过程呢??......