[r] 가장 유용한 R 트릭은 무엇입니까? [닫은]

R 에 대한 더 많은 팁과 트릭을 공유하기 위해 가장 유용한 기능 또는 트릭은 무엇입니까? 영리한 벡터화? 데이터 입 / 출력? 시각화와 그래픽? 통계 분석? 특수 기능? 대화 형 환경 자체?

게시물 당 하나의 항목이며, 투표를 통해 우승자를 얻을 수 있는지 확인합니다.

[2008 년 8 월 25 일 편집] : 1 주일 후에 단순 str()이 투표에서이긴 것 같습니다 . 내가 직접 추천하고 싶기 때문에 받아들이 기 쉬운 대답입니다.



답변

str() 모든 물체의 구조를 알려줍니다.


답변

내가 자주 사용하는 매우 유용한 함수 중 하나는 dput ()으로, R 코드 형태로 객체를 덤프 할 수 있습니다.

# Use the iris data set
R> data(iris)
# dput of a numeric vector
R> dput(iris$Petal.Length)
c(1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6,
1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5, 1.7, 1.5, 1, 1.7, 1.9,
1.6, 1.6, 1.5, 1.4, 1.6, 1.6, 1.5, 1.5, 1.4, 1.5, 1.2, 1.3, 1.4,
1.3, 1.5, 1.3, 1.3, 1.3, 1.6, 1.9, 1.4, 1.6, 1.4, 1.5, 1.4, 4.7,
4.5, 4.9, 4, 4.6, 4.5, 4.7, 3.3, 4.6, 3.9, 3.5, 4.2, 4, 4.7,
3.6, 4.4, 4.5, 4.1, 4.5, 3.9, 4.8, 4, 4.9, 4.7, 4.3, 4.4, 4.8,
5, 4.5, 3.5, 3.8, 3.7, 3.9, 5.1, 4.5, 4.5, 4.7, 4.4, 4.1, 4,
4.4, 4.6, 4, 3.3, 4.2, 4.2, 4.2, 4.3, 3, 4.1, 6, 5.1, 5.9, 5.6,
5.8, 6.6, 4.5, 6.3, 5.8, 6.1, 5.1, 5.3, 5.5, 5, 5.1, 5.3, 5.5,
6.7, 6.9, 5, 5.7, 4.9, 6.7, 4.9, 5.7, 6, 4.8, 4.9, 5.6, 5.8,
6.1, 6.4, 5.6, 5.1, 5.6, 6.1, 5.6, 5.5, 4.8, 5.4, 5.6, 5.1, 5.1,
5.9, 5.7, 5.2, 5, 5.2, 5.4, 5.1)
# dput of a factor levels
R> dput(levels(iris$Species))
c("setosa", "versicolor", "virginica")

도움을 요청할 때 쉽게 재현 가능한 데이터 청크를 게시하거나 요소 수준을 편집 또는 재정렬하는 것은 매우 유용 할 수 있습니다.


답변

head () 및 tail ()을 사용하여 데이터 프레임, 벡터, 행렬, 함수 등의 첫 번째 부분과 마지막 부분을 가져옵니다. 특히 큰 데이터 프레임의 경우이 방법을 사용하면 제대로로드되었는지 빠르게 확인할 수 있습니다.


답변

한 가지 좋은 기능 : 데이터 읽기는 로컬 파일, http를 통해 액세스되는 원격 파일, 다른 프로그램의 파이프 또는 그 이상이 될 수있는 연결 을 사용 합니다 .

간단한 예로서 random.org (의사 난수 생성기가 아닌 대기 소음을 기반으로 실제 난수를 제공) 에서 최소 = 100에서 최대 = 200 사이의 N = 10 임의 정수에 대한 액세스를 고려하십시오 .

R> site <- "http://random.org/integers/"         # base URL
R> query <- "num=10&min=100&max=200&col=2&base=10&format=plain&rnd=new"
R> txt <- paste(site, query, sep="?")            # concat url and query string
R> nums <- read.table(file=txt)                  # and read the data
R> nums                                          # and show it
   V1  V2
1 165 143
2 107 118
3 103 132
4 191 100
5 138 185
R>

곁에, random 패키지는 random.org 액세스를위한 몇 가지 편리한 기능을 제공합니다 .


답변

나는 내가 사용하고 찾을 수 with()within()더 많은. 더 이상 $내 코드를 어지럽히 지 않고 검색 경로에 개체를 첨부 할 필요가 없습니다. 더 진지하게, 나는 with()등 이 내 데이터 분석 스크립트 의 의도 를 훨씬 더 명확하게 만든다는 것을 발견했습니다 .

> df <- data.frame(A = runif(10), B = rnorm(10))
> A <- 1:10 ## something else hanging around...
> with(df, A + B) ## I know this will use A in df!
 [1]  0.04334784 -0.40444686  1.99368816  0.13871605 -1.17734837
 [6]  0.42473812  2.33014226  1.61690799  1.41901860  0.8699079

with()R 표현식이 평가되는 환경을 설정합니다. within()동일한 작업을 수행하지만 환경을 만드는 데 사용되는 데이터 개체를 수정할 수 있습니다.

> df <- within(df, C <- rpois(10, lambda = 2))
> head(df)
           A          B C
1 0.62635571 -0.5830079 1
2 0.04810539 -0.4525522 1
3 0.39706979  1.5966184 3
4 0.95802501 -0.8193090 2
5 0.76772541 -1.9450738 2
6 0.21335006  0.2113881 4

내가 처음 사용할 때 내가 몰랐 뭔가 within()당신이 평가 된 표현의 한 부분으로 할당 할 필요가 있다는 것입니다 원하는 효과를 얻기 위해 (위와 같이) 반환 된 객체를 할당합니다.


답변

데이터 입력 트릭 = RGoogleDocs 패키지

http://www.omegahat.org/RGoogleDocs/

Google 스프레드 시트는 모든 공동 작업자가 같은 페이지에있을 수있는 환상적인 방법이라는 것을 알게되었습니다. 또한 Google Forms를 사용하면 응답자의 데이터를 캡처하여 손쉽게 Google 스프레드 시트에 작성할 수 있습니다. 데이터가 자주 변경되고 거의 최종적이지 않기 때문에 R이 csv 파일을 다운로드하고 읽는 것보다 Google 스프레드 시트를 직접 읽는 것이 훨씬 바람직합니다.

# Get data from google spreadsheet
library(RGoogleDocs)
ps <-readline(prompt="get the password in ")
auth = getGoogleAuth("me@gmail.com", ps, service="wise")
sheets.con <- getGoogleDocsConnection(auth)
ts2=getWorksheets("Data Collection Repos",sheets.con)
names(ts2)
init.consent <-sheetAsMatrix(ts2$Sheet1,header=TRUE, as.data.frame=TRUE, trim=TRUE)

나는 기억할 수 없지만 다음 명령 중 하나 또는 두 개는 몇 초가 걸립니다.

  1. getGoogleAuth

  2. getGoogleDocsConnection

  3. getWorksheets


답변

비표준 이름을 참조하려면 백틱을 사용하십시오.

> df <- data.frame(x=rnorm(5),y=runif(5))
> names(df) <- 1:2
> df
           1         2
1 -1.2035003 0.6989573
2 -1.2146266 0.8272276
3  0.3563335 0.0947696
4 -0.4372646 0.9765767
5 -0.9952423 0.6477714
> df$1
Error: unexpected numeric constant in "df$1"
> df$`1`
[1] -1.2035003 -1.2146266  0.3563335 -0.4372646 -0.9952423

이 경우 df [, “1”]도 작동합니다. 그러나 백틱은 공식 내에서 작동합니다!

> lm(`2`~`1`,data=df)

Call:
lm(formula = `2` ~ `1`, data = df)

Coefficients:
(Intercept)          `1`
     0.4087      -0.3440

Dirk가 왜 잘못된 이름을 부여하는지 묻습니다. 모르겠어요! 그러나 나는 확실히이 문제를 실제로 꽤 자주 접한다. 예를 들어, hadley의 reshape 패키지를 사용합니다.

> library(reshape)
> df$z <- c(1,1,2,2,2)
> recast(df,z~.,id.var="z")
Aggregation requires fun.aggregate: length used as default
  z (all)
1 1     4
2 2     6
> recast(df,z~.,id.var="z")$(all)
Error: unexpected '(' in "recast(df,z~.,id.var="z")$("
> recast(df,z~.,id.var="z")$`(all)`
Aggregation requires fun.aggregate: length used as default
[1] 4 6