반면 adply( )를 사용해 결과를 데이터 프레임을 변환하면 결과 타입이 문자열로 모두 바뀌는 현상을 피할 수 있다. 다음은 adply( )를 사용해 데이터 프레임의 각 행을 보면서 Sepal.Length가 5.0 이상이고 Species가 setosa인지 여부를 확인한 다음 그 결과를 새로운 컬럼 V1에 기록하는 예다.
> adply(iris, + 1, + function(row) { row$Sepal.Length >= 5.0 & + row$Species == "setosa" }) Sepal.Length Sepal.Width Petal.Length Petal.Width Species V1 1 5.1 3.5 1.4 0.2 setosa TRUE 2 4.9 3.0 1.4 0.2 setosa FALSE 3 4.7 3.2 1.3 0.2 setosa FALSE 4 4.6 3.1 1.5 0.2 setosa FALSE 5 5.0 3.6 1.4 0.2 setosa TRUE ...
위 예에서는 adply( )에 인자로 넘긴 함수의 반환 값이 단순한 boolean 값이고, 그 결과가 임의의 컬럼명 V1에 저장되었다. 그러나 최종 반환 값이 데이터 프레임인 경우 함수의 반환 값을 데이터 프레임으로 하는 것이 안전하며, 데이터 프레임을 반환할 경우 계산 값을 저장한 컬럼명을 적절히 지정할 수 있다. 다음은 앞서와 같은 계산을 수행하지만 함수 내부에서 데이터 프레임을 반환하는 예다.
> adply(iris, + 1, + function(row) { + data.frame( + sepal_ge_5_setosa=c(row$Sepal.Length >= 5.0 & + row$Species == "setosa"))}) Sepal.Length Sepal.Width Petal.Length Petal.Width Species sepal_ge_5_setosa 1 5.1 3.5 1.4 0.2 setosa TRUE 2 4.9 3.0 1.4 0.2 setosa FALSE 3 4.7 3.2 1.3 0.2 setosa FALSE 4 4.6 3.1 1.5 0.2 setosa FALSE 5 5.0 3.6 1.4 0.2 setosa TRUE 6 5.4 3.9 1.7 0.4 setosa TRUE ...