Здесь читайте это. Он даст вам общий обзор пакетов и импорта. Это поможет вам изучить структуру исходного файла java. Ваша структура неверна.
http://www.leepoint.net/notes-java/language/10basics/import.html
EDIT: Попробуйте это тоже. Это немного более «вовлечено», но имеет много хороших деталей:
http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/ Chapter05 / packagesImport.html
x <- seq(0.1,10,0.1)
> x
[1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5
[16] 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0
[31] 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5
[46] 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0
[61] 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 7.1 7.2 7.3 7.4 7.5
[76] 7.6 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9.0
[91] 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 10.0
> ifelse(x < 5, 1, 2)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
nzMean <- function(x) { mean(x[x!=-1],na.rm=TRUE)}
nzMin <- function(x) {min(x[x!=-1],na.rm=TRUE)}
nzMax <- function(x) { max(x[x!=-1],na.rm=TRUE)}
nzRange<-function(x) {nzMax(x)-nzMin(x)}
nzSD <- function(x) { SD(x[x!=-1],na.rm=TRUE)}
#following function works
nzN1<- function(x) {ifelse(x!=-1,(x-nzMin(x))/nzRange(x) ,x) }
#following is bad as it returns only 4 not 5 elements of vector
nzN2<- function(x) {ifelse(x!=-1,(x[x!=-1]-nzMin(x))/nzRange(x) ,x) }
#following is bad as it returns 5 elements of vector but not correct answer
nzN3<- function(x) {ifelse(x!=-1,(x[x!=-1]-nzMin(x))/nzRange(x) ,-1) }
y<-c(1,-1,-20,2,4)
a<-nzMean(y)
b<-nzMin(y)
c<-nzMax(y)
d<-nzRange(y)
# test the working function
z<-nzN1(y)
print(z)
Вы также можете просто создать логический вектор и 1 к нему
x <- seq(0.1, 10, 0.1) # Your data set
(x >= 5) + 1
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
# [92] 2 2 2 2 2 2 2 2 2
. Если бы вы хотели сравнить производительность, это было бы самым быстрым решением
set.seed(100)
x <- runif(1e6, 1, 10)
RL <- function(x) y <- ifelse(x < 5,1,2)
JM <- function(x) {y <- rep(2, length(x)); y[x < 5] <- 1}
DA <- function(x) y <- (x >= 5) + 1
library(microbenchmark)
microbenchmark(RL(x),
JM(x),
DA(x))
# Unit: milliseconds
# expr min lq mean median uq max neval
# RL(x) 331.83448 366.52940 378.89182 374.99741 381.08659 609.21218 100
# JM(x) 38.72894 42.18745 44.36493 43.25086 44.09626 82.76168 100
# DA(x) 10.01644 11.96482 14.21593 13.17825 14.12930 53.76923 100
function(x) y <- (x >= 5L) + 1L
, но, как правило, хороший ответ и интересно посмотреть, насколько медленным, в сравнении, ifelse
.
– docendo discimus
30 December 2014 в 15:21
Следуя вышеприведенному сообщению, вы можете даже использовать и изменять элементы вектора, удовлетворяющего критериям. На мой взгляд, если это не так дорого вычислять быстрее, всегда нужно это делать.
x = seq(0.1,10,0.1)
y <- rep(2,length(x))
y[x<5] <- x[x<5]*2
Код предыдущего сообщения лучше всего ответить на вопрос. Но если бы мне пришлось использовать код выше, я бы сделал:
x = seq(0.1,10,0.1)
y <- rep(2,length(x))
y[x<5] <- x[x<5]*0 +1
Для полноты: в больших векторах вы можете использовать индексы для ускорения работы (мы часто это делаем в симуляциях, где функции обычно выполняются от 1000 до 10000 раз). Но пока это не нужно, просто используйте ifelse
. Это читается намного проще.
> set.seed(100)
> x <- runif(1000,1,10)
> system.time(replicate(10000,{
+ y <- ifelse(x < 5,1,2)
+ }))
user system elapsed
2.56 0.08 2.64
> system.time(replicate(10000,{
+ y <- rep(2,length(x))
+ y[x < 5]<- 1
+ }))
user system elapsed
0.48 0.00 0.48
x
содержит элементы NA
(которые будут оставаться NA
в первом, но будут назначены 1
для второго).
– jbaums
13 July 2014 в 10:31
y <- if (x < 5) 1 else 2
не работает на весь вектор (предупреждение, которое вы получаете, указывает, что будет использоваться только первый элемент условия). Вы хотите ifelse
:
y <- ifelse(x < 5, 1, 2)
ifelse
работает по всему логическому вектору, поэтапно. if
принимает только одно логическое значение. См. ?"if"
и ?ifelse
x = ...; x[x < 5] = 1
-ifelse(x < 5, 1, x)
– flying sheep 21 February 2015 в 18:23y[x < 5]
. Предполагая, что длиныx
иy
идентичны – Roman Luštrik 8 March 2017 в 16:12