Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用sapply将行添加到数据帧?_R_Sapply - Fatal编程技术网

R 如何使用sapply将行添加到数据帧?

R 如何使用sapply将行添加到数据帧?,r,sapply,R,Sapply,我试图在sappy函数调用中向数据框添加行,但它返回一个矩阵,而我希望数据框的列中包含变量,行中包含名称/地址 这是一个证明问题的简单示例。我这样做是为了避免使用“for”循环。有人能教我该怎么做吗 # initialize and empty data frame absdf <- data.frame( name = character(), address = character(), city = character(), stringsAsFac

我试图在sappy函数调用中向数据框添加行,但它返回一个矩阵,而我希望数据框的列中包含变量,行中包含名称/地址

这是一个证明问题的简单示例。我这样做是为了避免使用“for”循环。有人能教我该怎么做吗

# initialize and empty data frame
absdf <- data.frame(
    name = character(),
    address = character(), 
    city = character(),
    stringsAsFactors=FALSE)

# a numeric vector. 
idvs <- c(123, 465)

print("initial empty data frame:")
print(absdf)

absdf <- sapply(idvs, function(idv) {

    name <- paste("John Doe", idv)
    address <- "123 Main St."
    city <- "Elmhurst"

    absdf <- rbind(absdf, data.frame(
        name = name, 
        address = address,
        city = city,
        stringsAsFactors=FALSE))

})

# print it out - a sanity check
print("absdf final:")
print(absdf)

sapply
正试图将结果简化为矩阵,但您并没有得到预期的输出

应用中的“simplify”参数:

逻辑或字符串; 结果应该简化为向量、矩阵还是更高 如果可能的话,三维数组

由于
sapply
lappy
的包装器,为了简化输出,请尝试直接使用
lappy
创建数据帧

常用的函数call
do.call(rbind,)
组合了列表中的元素

absdf <- lapply(idvs, function(idv) {

    name <- paste("John Doe", idv)
    address <- "123 Main St."
    city <- "Elmhurst"

    data.frame(
        name = name, 
        address = address,
        city = city,
        stringsAsFactors=FALSE)

})
do.call(rbind, absdf)
#           name      address     city
# 1 John Doe 123 123 Main St. Elmhurst
# 2 John Doe 465 123 Main St. Elmhurst

absdf
sapply
试图将结果简化为矩阵,而您没有得到预期的输出

应用中的“simplify”参数:

逻辑或字符串; 结果应该简化为向量、矩阵还是更高 如果可能的话,三维数组

由于
sapply
lappy
的包装器,为了简化输出,请尝试直接使用
lappy
创建数据帧

常用的函数call
do.call(rbind,)
组合了列表中的元素

absdf <- lapply(idvs, function(idv) {

    name <- paste("John Doe", idv)
    address <- "123 Main St."
    city <- "Elmhurst"

    data.frame(
        name = name, 
        address = address,
        city = city,
        stringsAsFactors=FALSE)

})
do.call(rbind, absdf)
#           name      address     city
# 1 John Doe 123 123 Main St. Elmhurst
# 2 John Doe 465 123 Main St. Elmhurst

absdf@RichardScriven我认为最好避免使用包装器,而不是使用它,然后取消它的效果。最好直接跳到data.frame,嗯
data.frame(name=paste(“John Doe”,idvs),address=“123 Main St.”,city=“Elmhurst”,stringsAsFactors=FALSE)
@Frank我同意这种情况,但为了演示所描述的效果,问题很可能过于简化了。谢谢Pierre,这就是我所寻找的解决方案!我会接受你的回答,等我知道怎么做的时候。是的,这个问题是真实问题的简化版本。注意,我不得不将它稍微修改为:absdf@RichardScriven我认为最好避免使用包装器,而不是使用它,然后取消它的效果。最好直接跳到data.frame,嗯
data.frame(name=paste(“John Doe”,idvs),address=“123 Main St.”,city=“Elmhurst”,stringsAsFactors=FALSE)
@Frank我同意这种情况,但为了演示所描述的效果,问题很可能过于简化了。谢谢Pierre,这就是我所寻找的解决方案!我会接受你的回答,等我知道怎么做的时候。是的,这个问题是真实问题的简化版本。注意,我不得不将它稍微修改为:absdf
absdf <- lapply(idvs, function(idv) {

    name <- paste("John Doe", idv)
    address <- "123 Main St."
    city <- "Elmhurst"

    data.frame(
        name = name, 
        address = address,
        city = city,
        stringsAsFactors=FALSE)

})
do.call(rbind, absdf)
#           name      address     city
# 1 John Doe 123 123 Main St. Elmhurst
# 2 John Doe 465 123 Main St. Elmhurst