gpt4 book ai didi

r - 没有从 data.table 的 "j"参数中得到相同的结果

转载 作者:行者123 更新时间:2023-12-04 10:26:52 25 4
gpt4 key购买 nike

我正在从 data.table 的“j”参数中调用一个函数,但我没有得到与直接调用它时相同的结果。这似乎与 my function called in data.table j not returning expected results 有关

get.lower.bound <- function (x) {
rex <-
regexpr (pattern = "((?<lower>[\\-+\\d*\\.,]*)%\\s*<\\s*)?X(\\s<\\s(?<uppper>[\\-+\\d\\.,]*)%)?",
text = x,
perl = TRUE)
lower_bound <-
substring(
text = x,
first = attr(rex, "capture.start")[2],
last = attr(rex, "capture.start")[2] + attr(rex, "capture.length")[2] -1
)
lower_bound
}

dat <- data.table(
A = c('1% < X < 2%', '4% < X', 'X < 8%' ),
B = c('2% < X < 3%', '5% < X < 6%', '8% < X < 9%' ),
C = c('3% < X < 4%', '6% < X < 7%', 'X < 10%' )
)

get.lower.bound(dat[1,'A']) # this returns 1; as I expect
get.lower.bound(dat[2,'A']) # this returns 4; as I expect
get.lower.bound(dat[3,'A']) # this returns a blank string; as I expect
dat[i = 1, j = .(lb1 = get.lower.bound(A))] # this returns a data table of just one cell with 1 in it; as I expect
dat[i = 1:3, j = A] # this returns a character vector with the original strings in it; as I expect
dat[i = 1:3, j = .(lb1 = c(A))] # this returns a data table with the original strings in it; as I expect
dat[i = 1:3, j = .(lb1 = get.lower.bound(A))] # this returns "1% <", "4% <", "X < 8"; but I expect a "1", "4" & ""

为什么最后一行没有给我预期的结果?我需要做什么才能得到我要找的东西?

最佳答案

我认为那是因为你的函数 get.lower.bound 没有向量化。如果您按每一行对其进行分组然后传递该函数,它会给出预期的输出。

library(data.table)
dat[, j = .(lb1 = get.lower.bound(A)), by = 1:nrow(dat)]

# nrow lb1
#1: 1 1
#2: 2 4
#3: 3

关于r - 没有从 data.table 的 "j"参数中得到相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044799/

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