2015-09-25 25 views
0

我做了一个简单的函数,返回1或0的矢量,取决于第i个位置的值是大于还是小于vecor的平均值。这工作正常。函数从矢量得到假人

所以,我试图建立一个类似的函数,返回1在i值大于75%的情况下。不过,我得到一个“对象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 
} 

运行均值相同的功能(X)的位数表达取代的工作。类似地,分位数形式使用任何矢量自行工作。

我在这里错过了什么?

谢谢!

+0

好没关系,我改变了函数的名称删除75,它似乎工作。不知道命名功能,包括数字会导致他们不工作? – mark

+0

我做了,但没有指定什么样的错误,只是“Object x not found”。不知道我不应该这样做。刚刚开始使用R几个星期前:) – mark

+0

不知道“R”,但也许这是因为它是由一个数字开始,而不是因为它包含一个。 – adrien54

回答

1

如所讨论的返回一个载体,这个功能因其命名而不起作用。有规则来管理R对象的命名

语法上有效的名称由字母,数字和点或下划线字符组成,并以字母或点后面跟一个数字开头。诸如“.2way”之类的名称无效,保留字也不是。

一个很好的方法来检查你的名字是否有效与否是使用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

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 
+0

这绝对是更快,谢谢! – mark

+0

不客气。很高兴这是有帮助的 – Whitebeard