从矢量中获取假人的功能

时间:2015-09-25 14:52:59

标签: r function

我做了一个简单的函数,它返回1或0的向量,具体取决于第i个位置的值是大于还是小于vecor的平均值。这很好。

因此,在i的值大于分布的75%的情况下,我尝试构建类似的函数以返回1。但是,当我尝试运行此代码时,出现“找不到对象x”错误:

75dummy <- function(x)
{
  a <- c()
  for (i in 1:length(x)) {
    if (x[i] > (quantile(x, probs=0.75))) {a[i]<-1} else {a[i] <- 0}
  } 
  a
}

运行相同的函数,其中mean(x)代替了分位数表达式。类似地,分位数形式使用任何向量单独工作。

我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

如上所述,由于其命名,此功能无效。有一些规则可以控制R对象的命名

  

语法上有效的名称由字母,数字和点或下划线字符组成,以字母或点开头,后面没有数字。名称如&#34; .2way&#34;无效,保留字也不是。

检查您的姓名是否有效的一个好方法是使用make.names,它会自动解决任何无效的语法或字符:

> make.names("75dummy")
[1] "X75dummy"

该函数还将解析任何保留的R字:

> make.names(c("if", "else", "repeat", "function", Inf, NA, NULL, TRUE))
[1] "if."       "else."     "repeat."   "function." "Inf."      "NA."       "TRUE."   

参考:https://stat.ethz.ch/R-manual/R-devel/library/base/html/make.names.html

答案 1 :(得分:0)

这会将向量和结果(0,1)存储在data.frame

set.seed(321)
x <- rnorm(10)
data.frame(x, lvl = as.numeric(x >= quantile(x, .75)))

            x lvl
1   1.7049032   1
2  -0.7120386   0
3  -0.2779849   0
4  -0.1196490   0
5  -0.1239606   0
6   0.2681838   0
7   0.7268415   1
8   0.2331354   0
9   0.3391139   1
10 -0.5519147   0

或者创建一个从向量中返回向量的函数

myfn <- function(y, prob=.75) as.numeric(y >= quantile(x, prob))
myfn(x)
[1] 1 0 0 0 0 0 1 0 1 0