函数没有在向量中的所有对象上运行? (R)

时间:2016-03-05 21:55:53

标签: r function

我编写了以下函数来将全名更改为第一个首字母后跟姓氏:

name <- "John Doe"
names1(name)

所以

"J. Doe"

成功返回

sapply

但是,当我尝试将它应用于名称向量时,它只返回第一个对象(格式正确)。

为什么它不会在向量中的所有对象上执行该功能?我确实发现使用sapply它可以正常工作,但我可以在没有<?php $sInFile = 'in2.json'; $sOutFile = 'out2.json'; $aDevelopers = array(); $aArtists = array(); $aCooks = array(); $sRaw = file_get_contents( $sInFile ); var_dump( $sRaw ); // object $oData = json_decode( $sRaw ); //array $aData = json_decode( $sRaw, 1 ); $aNote = $aData[ 'note' ]; $aItems = $aNote[ 'items' ]; var_dump( $aData ); $iCountData = count( $aItems ); // Loops through items and set new values. for( $i = 0; $i < $iCountData; ++$i ) { $aItem = $aItems[ $i ]; $aItem[ 'value' ] = 'newvalue'; $aItem[ 'touchArea' ][ 'x' ] = 3455; $aItem[ 'touchArea' ][ 'y' ] = 43; $aItems[ $i ] = $aItem; } $aNote[ 'items' ] = $aItems; $aData[ 'note' ] = $aNote; var_dump( $aData ); $sNewJson = json_encode( $aData ); file_put_contents( $sOutFile, $sNewJson ); ?> 的向量上运行其他类型的函数,并将完整的向量作为输出返回。

1 个答案:

答案 0 :(得分:0)

来自data.table包的

tstrsplit使这更简单:

n = c("John Doe", "Abigail Ames")

library(data.table)
x = tstrsplit(n, " ")
paste0(substr(x[[1]],1,1), ". ", x[[2]])
# [1] "J. Doe"  "A. Ames"

或者,在基础中,您可以在函数上使用Vectorize来制作矢量化版本:

Vectorize(names1)(n)
#     John Doe Abigail Ames 
#     "J. Doe"    "A. Ames"

或使用sapply将函数应用于每个元素,然后合并结果

sapply(n, names1)
#     John Doe Abigail Ames 
#     "J. Doe"    "A. Ames"