gpt4 book ai didi

r - 为什么 apply(x, 1, paste0(collapse ="") 在正值之间留下空白?

转载 作者:行者123 更新时间:2023-12-01 03:29:53 25 4
gpt4 key购买 nike

当我在此示例中跨列应用时,我得到一个用于正值的空格,但不是用于负值?为什么是这样? paste0 不应该删除元素之间的空格吗?这个问题背后的背景是我正在尝试为 googlemaps Directions api 形成端点。

library(dplyr)
stop_latlon <- data.frame(lat = paste0("via:", rnorm(10)), lon = rnorm(10))

stop_latlon %>%
apply(1, function(x) paste0(x, collapse = "%7"))

编辑:我认为这与在具有不同数据类型的数据帧上运行应用程序有关(lat 是字符,lon 是数字)

最佳答案

为什么会出现空白?
paste0不会添加空格 - 也不会删除它。你可以通过调用 paste0 来测试它。在你的向量上。
apply在矩阵和数组上运行,而不是数据帧。当您将数据框传递给 apply ,它被强制转换为矩阵。当然,矩阵的主要内容是所有元素必须是相同的类型。由于通常不能将字符串或因子强制转换为数字,因此您的数字将被强制转换为字符串或因子以匹配第一列。如果您检查 as.matrix.data.frame ,你会看到 format用于此转换,?format显示默认 trim = FALSE说的是

trim; if FALSE, logical, numeric and complex values are right-justified to a common width: if TRUE the leading blanks for justification are suppressed.



所以有你的问题!

解决方案是什么?
pastepaste0是矢量化的,所以没有理由 apply他们一次一排。您可以直接将列粘贴在一起:
with(stop_latlon, paste0(lat, "%7", lon))

在更复杂的情况下, apply确实有必要,解决方案是处理您自己的矩阵转换,而不是依赖 apply用默认值来做。如果您在将数据传递给 apply 之前创建了所有列字符串, (或者如果您使用字符矩阵而不是数据框),转换将是直接的(或不必要的)。

关于r - 为什么 apply(x, 1, paste0(collapse ="") 在正值之间留下空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com