R 代码本身工作,但不是作为函数

R 代码本身工作,但不是作为函数,r,function,dplyr,r-package,R,Function,Dplyr,R Package,我有一个功能,我为一个包,不再工作了,我一直无法找出原因。函数的要点是将a转换为a(github上示例的链接)。这段代码相当长,所以这里不是全部包含,而是一个示例。当我逐行运行代码时,它工作得非常好,但是当我尝试使用该函数时,我得到了以下结果: > sample1.df <- transformssd(hex_data = sample1) a: 1.08641362190247 a: 59.1739654541016 a: 0.32277500629425 a: 2.7019853

我有一个功能,我为一个包,不再工作了,我一直无法找出原因。函数的要点是将a转换为a(github上示例的链接)。这段代码相当长,所以这里不是全部包含,而是一个示例。当我逐行运行代码时,它工作得非常好,但是当我尝试使用该函数时,我得到了以下结果:

> sample1.df <- transformssd(hex_data = sample1)
a: 1.08641362190247
a: 59.1739654541016
a: 0.32277500629425
a: 2.70198535919189
a: 0.127873212099075
a: 0.262394219636917
a: 27.9828720092773
a: 0.140874609351158
a: 0.274696856737137
a: 0.336845397949219
a: 0.452615290880203
a: 0.107537969946861
a: 0.12063916772604
a: 0.198753878474236
a: 0.521674871444702
a: 0.863220930099487
a: 0.765538036823273
Error: Must subset columns with a valid subscript vector.
x Can't convert from <double> to <integer> due to loss of precision.
问题似乎出在
dplyr::select()
上,但我一直无法找出原因。如果有人能帮我解决这个问题,我将非常感激,谢谢

上面链接的十六进制数据可用于在上测试代码

编辑

到目前为止,我还无法在较短的函数中重现错误,但这段代码并没有创建它应该创建的数据帧。由于最初的问题是在创建数据帧时,我认为这可能仍然有助于解决问题

library(tidyverse)
library(magicfor)

subhex <- c("9A0F8B3F", "24B26C42", "C442A53E")

transformhex <- function(hex_string) {
  subhex <- hex_string
  magic_for(silent = TRUE)
  for (i in 1: length(subhex)) {
    a <- readBin(as.raw(strtoi(apply(matrix(strsplit(subhex,"")[[i]],2),2,paste, collapse=""), 16)), "double", size=4)
    put(a)
  }
  
  values1.df <- magic_result_as_dataframe()
  values1.df <- values1.df %>% 
    dplyr::select(a)
  
  return(values1.df)
}

> transformhex(hex_string = subhex)
          a
1  1.086414
2 59.173965
3  0.322775
库(tidyverse)
图书馆(magicfor)

subhex如果将来有其他人有此问题,我将分享对我有效的解决方案:

我的问题是在我的函数中使用
magicfor
包中的函数。由于回答了另一个问题,我能够更改我的
for
循环,使其工作:

values.df <- data.frame()

  for (i in 1:length(subsubsplit1)) {
    a <- readBin(as.raw(strtoi(apply(matrix(strsplit(subsubsplit1,"")[[i]],2),2,paste, collapse=""), 16)), "double", size=4)
    values.df <- rbind(values.df, data.frame(t(a), row.names = NULL))
  }

  colnames(values.df) <- "kcps"

values.df我认为您的问题在于您没有正确地对所需的列进行子集设置,这是由以下
错误指示的:必须使用有效的下标向量对列进行子集设置。
。在第76行,您将变量
a
赋值为某物。在第83行,您使用这个变量从数据框中选择一些内容。但是,变量
a
未在select的范围内定义
a
仅在for循环中可见。我认为您面临的问题不需要我们在GitHub上浏览整个代码。你能试着用较小的例子来减少问题,以便生成特定的错误消息吗?@MacOS这是有道理的。我曾尝试将
a
置于循环之外,但由于
a
的定义中存在
[[I]]]
,因此我很难做到这一点。在仍然从字符串中提取每个值的情况下,如何在循环外部定义
a
?这可能是显而易见的,但我对R相当陌生,尤其是循环…@RonakShah,我可以试试!这个问题我没有答案,因为我不清楚你想要什么。对我来说,似乎你想根据你读二进制的字符串的分裂来选择一些东西。首先,我不确定选择器是否接受二进制。第二,我很确定逻辑是错误的,因为在当前代码
中,a
等于循环的最后一次迭代。试着为第73-84行举一个小例子。那么我相信@Ronaksah或我可以解决你的问题。
values.df <- data.frame()

  for (i in 1:length(subsubsplit1)) {
    a <- readBin(as.raw(strtoi(apply(matrix(strsplit(subsubsplit1,"")[[i]],2),2,paste, collapse=""), 16)), "double", size=4)
    values.df <- rbind(values.df, data.frame(t(a), row.names = NULL))
  }

  colnames(values.df) <- "kcps"