我做了一个简单的函数,它返回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)代替了分位数表达式。类似地,分位数形式使用任何向量单独工作。
我在这里缺少什么?
谢谢!
答案 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