2.
i <- 2<br />
> 1:i-1 # 注意这个地方!是指(1:i)-1<br />
[1] 0 1<br />
> 1:(i-1)<br />
[1] 1
</p>2.
i <- 2<br />
> 1:i-1 # 注意这个地方!是指(1:i)-1<br />
[1] 0 1<br />
> 1:(i-1)<br />
[1] 1
</p>3.which()
which可以很方便的用来寻找一些符合固定条件的下标,比如我想找x=c(1,2,3,4,5,1,8)这里面第2个等于1的位置:
which(x==1)[2],抛砖引玉,希望能给大家启发
4.apply函数
很多人知道apply函数可以对矩阵进行操作,下复制一个例子,更好的启发大家的思路:
> z<br />
[,1] [,2]<br />
[1,] 1 4<br />
[2,] 2 5<br />
[3,] 3 6<br />
> f <- function(x) x/c(2,8)<br />
> y <- apply(z,1,f)<br />
> y<br />
[,1] [,2] [,3]<br />
[1,] 0.5 1.000 1.50<br />
[2,] 0.5 0.625 0.75<br />
t(apply(z,1,f))
5.complete.cases()
很多时候我们想去掉NA的情形:
> d4<br />
kids states<br />
1 Jack CA<br />
2 <NA> MA<br />
3 Jillian MA<br />
4 John <NA>
> d5 <- d4[complete.cases(d4),]<br />
> d5<br />
kids states<br />
1 Jack CA<br />
3 Jillian MA
6.merge()函数
这个函数我觉得很好用,比如我有2个数据框:
> d1<br />
kids states<br />
1 Jack CA<br />
2 Jill MA<br />
3 Jillian MA<br />
4 John HI<br />
> d2<br />
ages kids<br />
1 10 Jill<br />
2 7 Lillian<br />
3 12 Jack
> d <- merge(d1,d2)<br />
> d<br />
kids states ages<br />
1 Jack CA 12<br />
2 Jill MA 10
7.split()函数
> g <- c("M","F","F","I","M","M","F")<br />
> split(1:7,g)<br />
$F<br />
[1] 2 3 7<br />
$I<br />
[1] 4<br />
$M<br />
[1] 1 5 6
回复 第4楼 的 superdesolator:
非常感谢分享,这些总结对于初学者来说会很有帮助。
在第5点里面,有个更简单的用法是
na.omit(d4)
</p>
另外继续更新的时候把代码放在[code][/code]
中会更美观。[s:17]
回复 第2楼 的 superdesolator:作为一名新手,我数次犯如下错误:
<br />
for (i in 1:n-1) #这里 n-1 应该写成 (n-1) 才对<br />
{<br />
print("Hello World!")<br />
}<br />
</p>
引以为戒。
这个要顶!!
回复 第9楼 的 Peter Chen:握爪。。有一次写代码debug了很久还是报错。。这个小错误对于编程新手也许真的很容易忽视。。
同搭船, try()函数
上次在一份帖子里提过,这次再拿出来共享一下。
<br />
x <- list(10, 20, "a", "b", 30, 40)<br />
z <- list(0)<br />
y <- list(0)<br />
for (i in 1:length(x)){<br />
z[[i]] <- log(x[[i]])<br />
}<br />
z<br />
# 提示错误,停止运行<br />
# 错误于log(x[[i]]) : 数学函数中用了非数值参数<br />
# > z<br />
# [[1]]<br />
# [1] 2.302585<br />
#<br />
# [[2]]<br />
# [1] 2.995732<br />
for (i in 1:length(x)){<br />
y[[i]] <- try(log(x[[i]]), F)<br />
}<br />
y<br />
# 提示错误,继续运行<br />
# Error in log(x[[i]]) : 数学函数中用了非数值参数<br />
# Error in log(x[[i]]) : 数学函数中用了非数值参数<br />
# > y<br />
# [[1]]<br />
# [1] 2.302585<br />
#<br />
# [[2]]<br />
# [1] 2.995732<br />
#<br />
# [[3]]<br />
# [1] "Error in log(x[[i]]) : 数学函数中用了非数值参数\n"<br />
# attr(,"class")<br />
# [1] "try-error"<br />
# attr(,"condition")<br />
# <simpleError in log(x[[i]]): 数学函数中用了非数值参数><br />
#<br />
# [[4]]<br />
# [1] "Error in log(x[[i]]) : 数学函数中用了非数值参数\n"<br />
# attr(,"class")<br />
# [1] "try-error"<br />
# attr(,"condition")<br />
# <simpleError in log(x[[i]]): 数学函数中用了非数值参数><br />
#<br />
# [[5]]<br />
# [1] 3.401197<br />
#<br />
# [[6]]<br />
# [1] 3.688879<br />
</p>还有这个
<br />
for (i in 1:3) {<br />
print("select i")<br />
}<br />
for (i in 1:3) {<br />
print(paste("select", i))<br />
}<br />
8.get()函数
这个函数也是很好用的!看下面的循环
<br />
a=c(1,2,3)<br />
b=c(4,5,6)<br />
for(n in c("a","b")) print(n)<br />
for(n in c("a","b")) print(get(n))</p>
<p>
9.pmin()函数
比如:我们想得到
a=c(1,2,3)
b=c(2,0,4)
中的最小,我们可以min(a,b)得到结果0,但是大家用下pmin(a,b)会得到什么呢?
回复 第15楼 的 superdesolator:不错。学无止尽[s:13]
10.order()函数
比如我有:d=data.frame(kids=c("a","b","c"),ages=c(2,6,4))
> d
kids ages
1 a 2
2 b 6
3 c 4
我现在想根据ages从小到大排,我们可以:
d[order(d$ages),]
得到:
kids ages
1 a 2
3 c 4
2 b 6
这里保存了第一列与第二列的对应关系,大家可以仔细推敲下d[order(d$ages),]为什么可以这样。
11.cat()函数
今天终于看到cat()函数的用法了:
x=c(1,2,3)
cat(x,sep=c(".","\n","\n"))
看看吧!总的来说它是作为一种输出方式的函数.
12.grep()函数
> grep("Pole",c("Equator","North Pole","South Pole"))
[1] 2 3
> grep("pole",c("Equator","North Pole","South Pole"))
integer(0)
grep(pattern,x)就是在x中找含有pattern的函数,蛮有用的
13.substr()与strsplit()函数
这两个要提下用来扫盲。。
> substring("Equator",3,5)
[1] "uat"
> strsplit("6-16-2011",split="-")
[[1]]
[1] "6" "16" "2011"
14.regexpr()与gregexpr()函数
这2个可能大家比较陌生点:
> regexpr("uat","Equator")
[1] 3
就是在后面的文中找前面的,返回第几个开始
> gregexpr("iss","Mississippi")
[[1]]
[1] 2 5
这个与上面的类似,但找所有的