1. rbind(), cbind(): 構造、合並vector 或matrix為一個矩陣:cbind(1, 1:10) ----默認列合並, rbind(1, 1:10) ----行合並(or構造)
2. R語言中關於矩陣,向量的一些運算
① 矩陣相乘使用“%*%”,而不是"*", 矩陣與向量,向量與向量相乘最好也是如此;
② 創建一個n*1維的向量,並添加到矩陣中,使用 x0 <- matrix(0, nrow=n, ncol=1), x <- cbind(x0, x); 使用matrix和cbind函數;
③ nrow, ncol函數的參數不能是向量,可以是矩陣、數組、數據框,如y <- c(1,2,3), n <- nrow(y),這樣得到的n是NULL,而不是理想的3. 可使用n <- length(y)來求;dim(y)[1]也不可以;
④ 矩陣or向量的轉置函數:t(v),其中v可以是向量or矩陣;
⑤ 提示“錯誤於..., 非整合陳列/參數”, 說明矩陣相乘行列不匹配,可能是運算符用錯;
⑥當list,data.frame等類型中元素是數據類型時,看通過as.matrix(x)來做轉化成矩陣形式,此時要注意:x[i, ]某一個行的值,是向量形式,即is.vector(x[i, ]) --- TRUE; is.matrix(x[i, ]) --- FALSE; 那么給參數賦值時,要注意,不要使用t(), 如 w <- w + y[i] * t(x[i, ]) (錯誤), 應改寫為 w <- w + y[i] * x[i, ]
3. RTools(R語言編譯工具)安裝與配置
① 根據R語言版本下載對應的RTools版本,RTools下載地址:http://cran.r-project.org/bin/windows/Rtools/
② 配置環境設置:本人的RTools安裝在D:\InstalledProgramingSoftware\Rtools中,這里需要把RTools的bin目錄和gcc-4.6.3對應的bin目錄設置環境變量。右鍵-》我的電腦-》高級-》環境變量-》系統變量下面的Path雙擊-》在值的后面打個分號,D:\InstalledProgramingSoftware\Rtools\bin; D:\InstalledProgramingSoftware\Rtools\gcc-4.6.3\bin(注意:一定要保證在PATH中順序在D:\cygwin\bin前面)
4. RMySQL 64win7安裝過程
① 下載安裝與R對應版本的RTools,安裝並配置(具體見2);
② 在R的安裝目錄\R-2.5.3\etc\目錄下,創建 Renviron.site文件,並在里面添加MYSQL_HOME=MySQL
的安裝路徑(我的是:MYSQL_HOME=D:/InstalledProgramingSoftware/MySQL/MySQL Server 5.5, 注意改成反斜杠);
③ 將MySQL安裝目錄/lib下的libmysql.lib文件拷貝到 mysql/lib/opt 文件夾下,沒有opt的,建一個文件夾,同時也將libmysql.dll文件copy到R-2.15.3/bin下面
④ 在R中執行:install.packages("RMySQL", type="source"),最終看到DONE的提示,說明安裝成功,可使用Sys.getenv(MYSQL_HOME)驗證路徑是否正確,使用library(RMySQL)驗證是否安裝成功。
本人機器(64 win7)上安裝后,提示沒有安裝成功,看了下過程是編譯error,經過查找之后,發現之前安裝過cygwin,並即將其路徑配置到系統變量PATH中,雖然安裝RTools時,也將gcc-4.6.3/bin配置到PATH路徑上了,但是是放在cygwin后面的,機器總是按照順序在路徑上找,所以首先找到了cygwin,用它來編譯源文件包,所以出錯了,Solution:將gcc-4.6.3/bin 放置在cygwin前面,這樣在執行④,就OK了~
5. R語言 函數問題
① R函數的返回值可以是任何對象,或復雜的對象。IF函數有多個返回值,可以把它存儲在一個列表或其它容器變量中,返回。 例如,線性回歸學習算法(梯度下降)要返回損失函數J和參數theta, mylist <- list(J, theta), return(mylist); 其中mylist[[1]] ----> J;
② 函數都是對象,因此
(1). 函數可以作為其他函數的參數,例如
f1 <- function(x) return(a+b);
f2 <- function(x) return(a-b);
g <- function(h, a, b);
g(f1, 3, 2) g=5;
g(f2,3,2) g=1;
(2). 因為函數是對象,所有可以在函數所組成的列表上做循環,比如在一幅圖上繪制若干個函數的圖形,舉例:
g1 <- function(x) return(sin(x))
g2 <- function(x) return(sqrt(x^2 + 1))
g3 <- function(x) return(2*x - 1)
plot(c(0,1), c(-1, 1.5))
for (f in c(g1, g2, g3)) plot(f, 0, 1, add=T)
③ 通過賦值來改變函數的主體, 舉例:
g <- function(h,a,b) h(a,b)
body(g) <- quote(2*x + 3)
④⑤
6. R語言編程:邏輯元素問題
(1). R中,如果提示"錯誤於if(...) {: 需要TRUE/FALSE的地方不可以用缺少值",
解釋錯誤:if(condition),其中condition處只能是TRUE/FALSE,不能是其它值,由於參與邏輯運算符的變量,存在缺失值NA,導致了condition出現了NA,才會提示錯誤;
出現錯誤的可能:① 參與計算的數據存在缺失值;② 參與運算的向量/矩陣/數組, 下標出界;
解決方案:詳細檢查數據是否存在缺失值,進行彌補,可能是由於導數導入的問題;插入必要的print語句,檢查下標出界問題;
(2) 當理所當然的認為 矩陣 %*% 矩陣相乘時,可能會提示以下錯誤:錯誤於x %*% ww : 需要數值/復數矩陣/矢量參數. 這是因為運算數的數據類型可能不是矩陣(徒有其表),可能是list,dataframe等形式,此時需要做類型轉換(當運算數的每個元素數據類型相同時),如 x <- as.matrix(x),當然也有可能是行列出了問題;
7. 隨機抽樣函數
(1). R中,將數據集中record/example的原本順序打亂,如何實現?sample()
在數據處理or驗證數據中record順序對算法的影響時,需要將使用隨機數生成函數,將原本數據打亂,R中可使用example()函數:
x <- 1:10
sample(x) --- > 8 3 2 6 9 10 4 5 1 7 (生成x內的數的亂序)
sample(c(0,1), 100, replace=TRUE) ---> 生成100個0和1的數(伯努利抽樣)
sample(x, size, replace = FALSE, prob = NULL) # x為含1個or多個元素的容器,size表示從x中隨機抽取數,replace表示是否放回(可重復)
sample.int(n, size =n, replace = FALSE, prob = NULL); n表示可以抽取的是1:n中的數,size表示抽取的個數,replace表示是否放回;
詳細請 ?sample
(2). 當然runif(), rnorm()可以用作浮點數/正態分布數據的隨機生成,當然還有好多滿足某種概率分布生成數的函數....
8. 排列組合
(1). pregmisc包,permutations(n= , r = ) # 排列函數,列出A(n,r)中所有排列; combinations(n= , r= ) #組合函數,列出C(n,r)中所有組合;
(2). choose(n,r) # 計算組合數,如choose(6,3) ---> 20; factorial(n) # 計算階乘,n! = n*(n-1)*....*1; 二者組合可計算排列數C(n,r) = n! / r! ;
(3).