2015-09-25 47 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