|||
R语言中复合函数的数据调用顺序
熊荣川
六盘水师范学院生物信息学实验室
http://blog.sciencenet.cn/u/Bearjazz
R语言的精髓在于大大小小,形形色色的函数可以使用,因而少不了出现复合函数的情况——函数中的变量嵌套着函数。这时候数据的调用一般遵循先内部后外部的顺序,下面是一个小小的例子供读者体会。
> |
x <- c(6:-4) |
为向量x赋值从6到-4 |
> |
x |
查看x |
|
[1] 6 5 4 3 2 1 0 -1 -2 -3 -4
|
|
> |
sqrt(x) |
对x中的所有数据求平方根 |
|
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NaN [9] NaN NaN NaN 警告信息:In sqrt(x) : 产生了NaNs |
因为向量中部分数据为负数,出现警告信息 |
|
|
|
> |
sqrt(ifelse(x >= 0, x, NA)) |
只对x向量中大于或等于0的数据进行平方根运算,其它的直接返回NA
|
|
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA [9] NA NA NA |
结果没有警告信息,数据先是完成了ifelse()函数的运算——挑选大于或等于0的数据,然后才进行“外部”函数sqrt()的运算。所以不会出错 |
|
|
|
|
> ifelse(x >= 0, sqrt(x), NA) |
和上个例子相比,这里刚好把“外部”函数和“内部”函数调换 |
|
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA [9] NA NA NA 警告信息: In sqrt(x) : 产生了NaNs |
结果出现了警告信息。原因就是sqrt()作为一个“内部”函数首先进行运算,而x中部分数据为负数不能直接进行平方根运算 |
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-27 19:20
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社