我编写了以下函数来将全名更改为第一个首字母后跟姓氏:
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 );
?>
的向量上运行其他类型的函数,并将完整的向量作为输出返回。
答案 0 :(得分:0)
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"